sed使用参数:sed [-nefr] [动作]
-n :使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作:
a :新增, a 的后面接字串,这些字串会在当前的下一行出现。
i :插入, i 的后面接字串,这些字串会在当前的上一行出现。
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
d :删除
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
s :取代,可以直接进行取代的工作。
示例:
将aaa.txt的内容列出并且列印行号,同时,请将第1-2行删除!
# nl aaa.txt | sed '1,2d'
sed的动作为'1,2d',即删除1-2行。注意一下,原本应该是sed -e才对,没有 -e 也行,同时也要注意aaa.txt文件没有变化!
只要删除第 2 行
# nl aaa.txt | sed '2d'
要删除第3到最后一行
在第二行后加上“abcdef”
# nl aaa.txt | sed '2a abcdef'
如果是要在第二行前
# nl aaa.txt | sed '2i abcdef'
将第2-5行的内容取代成为"abcdef"
# nl aaa.txt | sed '2,5c abcdef'
仅列出文件内的第 5-7 行
# nl aaa.txt | sed -n '5,7p'
搜索aaa.txt,找到flume对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把arg替换为args,再输出这行
# nl aaa.txt | sed -n '/flume/{s/arg/args/;p}'
如果只替换第一个flume行中arg关键字,就退出
# nl aaa.txt | sed -n '/flume/{s/arg/args/;p;q}'
最后的q是退出。
数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
直接修改文件内容
# sed -i 's/\.$/\!/g' regular_express.txt
在 aaa.txt 最后一行加入“test”,$ 代表的是最后一行
# sed -i '$a test' aaa.txt
-n :使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作:
a :新增, a 的后面接字串,这些字串会在当前的下一行出现。
i :插入, i 的后面接字串,这些字串会在当前的上一行出现。
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
d :删除
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
s :取代,可以直接进行取代的工作。
示例:
将aaa.txt的内容列出并且列印行号,同时,请将第1-2行删除!
# nl aaa.txt | sed '1,2d'
sed的动作为'1,2d',即删除1-2行。注意一下,原本应该是sed -e才对,没有 -e 也行,同时也要注意aaa.txt文件没有变化!
只要删除第 2 行
# nl aaa.txt | sed '2d'
要删除第3到最后一行
# nl aaa.txt | sed '3,$d'
如果删除以Love开头的行
# sed -i '/^Love/d' aaa.txt
删除包含Love的行
# sed -i '/Love/d' aaa.txt
在第二行后加上“abcdef”
# nl aaa.txt | sed '2a abcdef'
如果是要在第二行前
# nl aaa.txt | sed '2i abcdef'
将第2-5行的内容取代成为"abcdef"
# nl aaa.txt | sed '2,5c abcdef'
仅列出文件内的第 5-7 行
# nl aaa.txt | sed -n '5,7p'
搜索aaa.txt,找到flume对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把arg替换为args,再输出这行
# nl aaa.txt | sed -n '/flume/{s/arg/args/;p}'
如果只替换第一个flume行中arg关键字,就退出
# nl aaa.txt | sed -n '/flume/{s/arg/args/;p;q}'
最后的q是退出。
数据的搜寻并替换
sed 's/要被取代的字串/新的字串/g'
直接修改文件内容
# sed -i 's/\.$/\!/g' regular_express.txt
在 aaa.txt 最后一行加入“test”,$ 代表的是最后一行
# sed -i '$a test' aaa.txt
在行首添加字符串;
sed -i 's/^/xxx/'
aaa.txt # ^符号代表行首
在行尾添加字符串;
sed 's/$/string/' aaa.txt # $符号代表行尾