shell之sed命令

sed是流编辑器,依据特定的匹配模式,对文本逐行匹配,并对匹配进行特定处理。

格式命令:sed [选项命令]  "/pattern/操作命令" file

选项命令

-e 表示用指定命令或者脚本来处理输入的文本文件
-f 表使用指定的脚本文件爱你来处理输入的文本文件
-h 帮助命令
-n 标识仅仅显示处理的结果
-i 直接编辑文本文件

操作命令

查询

p 打印,如果同时指定行,表示打印指定行;如果不指定行,表示打印所有内容

删除

d 删除,删除选定的行

增加

a 增加,匹配到的行后追加内容

i 插入,匹配到的行钱追加内容

r 将后面指定文件的内容追加到匹配到的行后面

w将匹配到的换行内容另存到其他文件

修改
c 替换,将选定行替换为指定内容


s 替换,替换指定字符串
y 字符转换

 

parttern用法

# sed -n 'p' test.txt  '输出所有内容,等同于 cat test.txt'
# sed -n '3p' test.txt    '输出第 3 行'
# sed -n '3,5p' test.txt    '输出第 3~5 行'
# sed -n 'p;n' test.txt    '输出所有奇数行,n 表示读入下一行资料'
# sed -n 'n;p' test.txt    '输出所有偶数行,n 表示读入下一行资料'
# sed -n '1,5{p;n}' test.txt    '输出第 1~5 行之间的奇数行(第 1、3、5 行)'
# sed -n '10,${n;p}' test.txt    '输出第 10 行至文件尾之间的偶数行'
# sed -n '/^root/p' test.txt     '打印test.txt文件中以root开头的行'
# sed -n '/^php/,/^java/p'       'test.txt 打印test.txt文件中以php开头的行到以java开头的行'
# sed -n '4,/^php/p' test.txt     '打印test.txt文件中从第4行开始,直到以php开头的行'
# sed -n '/the/p' test.txt '输出包含the 的行'
# sed -n '4,/the/p' test.txt '输出从第 4 行至第一个包含 the 的行'
# sed -n '/the/=' test.txt '输出包含the 的行所在的行号,等号(=)用来输出行号'
# sed -n '/^PI/p' test.txt '输出以PI 开头的行'
# sed -n '/[0-9]$/p' test.txt '输出以数字结尾的行'
# sed -n '/\<wood\>/p' test.txt '输出包含单词wood 的行,\<、\>代表单词边界'

d用法

下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果

# nl test.txt | sed '3d'    '删除第 3 行'
# nl test.txt | sed '3,5d'    '删除第 3~5 行'
# nl test.txt | sed '/cross/d'    '删除包含cross 的行'
# nl test.txt | sed '/cross/! d'    '删除不包含cross 的行'
# sed '/^[a-z]/d' test.txt    '删除以小写字母开头的行'
# sed '/\.$/d' test.txt    '删除以"."结尾的行'
# sed '/^$/d' test.txt    '删除所有空行'
# sed -e '/^$/{n;/^$/d}' test.txt    '删除重复的空行,即连续的空行只保留一个,效果与“cat -s test.txt”相同,n 表示读下一行数据'

 s用法

使用 sed 命令进行替换操作时需要用到 s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项

# sed 's/the/THE/' test.txt    '将每行中的第一个the 替换为 THE '
# sed 's/l/L/2' test.txt    '将每行中的第 2 个l 替换为L '
# sed 's/the/THE/g' test.txt    '将文件中的所有the 替换为THE'
# sed 's/o//g' test.txt    '将文件中的所有o 删除(替换为空串)'
# sed 's/^/#/' test.txt    '在每行行首插入#号'
# sed '/the/s/^/#/' test.txt        '在包含the 的每行行首插入#号'
# sed 's/$/EOF/' test.txt        '在每行行尾插入字符串EOF'
# sed '3,5s/the/THE/g' test.txt    '将第 3~5 行中的所有the 替换为 THE'
# sed '/the/s/o/O/g' test.txt    '将包含the 的所有行中的o 都替换为 O'

 

cat user.txt | grep h |sed -n '1,3p' //在user.txt文件中;匹配带h的行 并且只显示1,3行
cat user.txt | grep h | sed '$d' //删除最后一行记录
cat user.txt | grep h |sed '2,3d' //在user.txt中显示带h的行;并且从结果中删掉2,3行的记录;只看第一行记录

 

sed -i '1s/root/ROOT/'  file    //修改file文件中第1行中第一个root为ROOT
sed -i '5,10s/test/TEST/g'  file   //修改file文件中第5行到第10行中所有的test改为TEST

 

posted @ 2018-02-27 00:16  温柔的风  阅读(124)  评论(0编辑  收藏  举报