linux脚本攻略学习笔记17

众多处理文本应用的综合应用

(1)在文件中移除包含某个单词的句子

sed是进行文本替换的不二之选。这样,我们就可以通过sed用空白替代匹配的句子。

先创建一个包含替换文本的文件。例如:


我们的目标是移除包含"mobile phones" 的句子。可以用sed语句来实现:


这里的匹配模式是用来匹配整句文本的正则表达式,文件中的每一句话第一个字符都是空格,句与句之间用"."来分割。因此我们需要匹配内容的格式是:空格+若干文本+需要匹配的字符串+若干文本+句点。一个句子除了作为定界符的句点之外,可以包含任意字符。因此我们要使用[^.]。[^.]*可以匹配除句点之外的任何字符组合。用来匹配文本的"mobile phone" 被放置在两个[^.]*之间。每一个匹配的句子均被//替换。

(2)对目录中的所有文件进行文本替换

假如我们希望将所有.cpp文件中的Copyright替换成Copyleft:

$find . -name *.cpp -print0 |xargs -I{} -0 sed -i 's/Copyright/Copyleft/g' {}
工作原理:

我们使用find在当前目录下查找所有的.cpp文件,然后使用print0打印出以null字符(\0)作为分隔符文件列表。

此外还可以用-exec来完成此功能,回忆一下,find有一个选项-exec,他可以对每个find查找到的文件执行命令,我们可以使用该选项,具体如下:

$ find . -name *.cpp -exec sed -i 's/Copyright/Copyleft/g'  \{\} \;


(3) 文本切片和参数操作

替换变量内容中的部分文本:


我们可以通过制定字符串的起始位置和长度来生成子串,语法如下:

$ ${variable_name:start_postion:length}
用下面的命令可以打印第五个字符之后的内容:


从第5个字符开始,打印8个字符


起始字符的索引从0开始计数,我们也可以从后向前计数,将最后一个字符索引记为-1.但是如果使用附属作为索引值,则必须将附属放入括号中,(-1)就是最后一个字符的索引。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值