sed指定一定范围的行进行处理
使用sed指令的时候,默认会把整个文件的所有行都依次取出来进行匹配,如果想要指定哪些行进行处理的话可以使用以下几种方法。
1 指定数字过滤行
sed把文本的第一行编号为1
,以此类推,最后一行用$
表示,可以单行进行操作或者对一定范围的行
进行操作,比如待处理的文件为testfile,内容如下:
liao ning wei shi, hu nan wei shi
jiang xi wei shi, zhe jiang wei shi
jiang su wei shi, ning xia wei shi,
shan dong wei shi,xi zang wei shi,
si chuan wei shi,chong qing wei shi,
jiang xi wei shi,an hui wei shi
1.1 单行操作
比如只把第二行的wei字符串换成youku字符串,输入如下:
sed '2s/wei/youku/' testfile
运行后结果为:
liao ning wei shi, hu nan wei shi
jiang xi youku shi, zhe jiang wei shi
jiang su wei shi, ning xia wei shi,
shan dong wei shi,xi zang wei shi,
si chuan wei shi,chong qing wei shi,
jiang xi wei shi,an hui wei shi
1.2 指定多行
比如把从第二行到第四行的内容第一次出现的为改成youku,输入:
sed '2,4s/wei/youku/' testfile
运行后结果如下:
liao ning wei shi, hu nan wei shi
jiang xi youku shi, zhe jiang wei shi
jiang su youku shi, ning xia wei shi,
shan dong youku shi,xi zang wei shi,
si chuan wei shi,chong qing wei shi,
jiang xi wei shi,an hui wei shi
1.3 从指定行一直到最后一行
用美元符号
指定到最后一行,比如把从第3
行到最后一行内容中所有的wei
都改成you ku
,输入如下:
sed '3,$s/wei/you ku/g' testfile
运行后结果如下:
liao ning wei shi, hu nan wei shi
jiang xi wei shi, zhe jiang wei shi
jiang su you ku shi, ning xia you ku shi,
shan dong you ku shi,xi zang you ku shi,
si chuan you ku shi,chong qing you ku shi,
jiang xi you ku shi,an hui you ku shi
1.4 使用文本过滤行
使用文本过滤可以过滤出只包含目标字符串的行进行处理,这里的优势在于目标字符串可以使用正则表达式
[正则表达式后续详谈]。假如要把包含jiang xi
这个字符串的行中的所有wei
改成you ku
,输入如下:
sed '/jiang xi/s/wei/you ku/' testfile
运行后结果为:
liao ning wei shi, hu nan wei shi
jiang xi you ku shi, zhe jiang you ku shi
jiang su wei shi, ning xia wei shi,
shan dong wei shi,xi zang wei shi,
si chuan wei shi,chong qing wei shi,
jiang xi you ku shi,an hui you ku shi
多行模式
也可以与之前的命令组合,比如之前提到的-e
用于多个命令,输入:
sed -e '2,$s/wei/youku/g;3,$s/shi/tengxu/g' testfile
运行后结果为:
liao ning wei shi, hu nan wei shi
jiang xi youku shi, zhe jiang youku shi
jiang su youku tengxu, ning xia youku tengxu,
shan dong youku tengxu,xi zang youku tengxu,
si chuan youku tengxu,chong qing youku tengxu,
jiang xi youku tengxu,an hui youku tengxu