首页 Linux基础Linux命令正文

Linux命令-sed命令

Jean Linux命令 2018-11-01 1568 0 Linux命令
sed 流编辑器,实现对文件的增删改替换查
-n 取消默认输出,擅长处理行(三剑客老二)
-r 支持正则,不需要\反斜杠
-i 修改内容
-e 允许多项编辑 例子:sed -n -e '2p' -e '6p' file.txt 取出第二行和第六行内容 或sed -n -e '2p;6p'  file.txt
函数
a 追加文本到指定行后 sed '2a test\ntest1' file.txt 从第二行开始把test追加到内容后面,加个\n代表多行追加
p 打印 例子:sed -n '20,30p' file.txtsed -n '20p' file.txt sed -n '$p' file.txt 
d 删除
c 替换
i 插入文本到指定行前 sed '2i test' file.txt 插入到第二行
r 从文件中读入
w 写入到文件中
s 单独使用→将每一行中第一处匹配的字符串进行替换
g 每一行进行匹配上的内容都替换 和s一起使用 's###g' 还必须要
指定执行的地址范围
sed软件可以对单行或多行进行处理。如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
用法:n1[,n2]{sed-commands}   sed-commands就是上面的函数
地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
例子:
10{sed-commands}        对第10行操作
10,20{sed-commands}     对10到20行操作,包括第10,20行
10,+20{sed-commands}   对10到30(10+20)行操作,包括第10,30行
1~2{sed-commands}       对1,3,5,7,……行操作
10,${sed-commands}     对10到最后一行($代表最后一行)操作,包括第10行
/shnne/{sed-commands}         对匹配shnne的行操作
/shnne/,/Alex/{sed-commands}  对匹配shnne的行到匹配Alex的行操作
/shnne/,${sed-commands}       对匹配shnne的行到最后一行操作
/shnne/,10{sed-commands}      对匹配shnne的行到第10行操作,注意:如果前10行没有匹配到shnne,sed软件会显示10行以后的匹配shnne的行,如果有。
1,/Alex/{sed-commands}         对第1行到匹配Alex的行操作
/shnne/,+2{sed-commands}      对匹配shnne的行到其后的2行操作
例子:
sed -n l file.txt 显示文件的特殊符号,是L不是1
sed -n '1,3p' /etc/passwd 打印1-3行
sed -n '1,$p' /etc/passwd 打印1-最后行
sed -n '/shnne/,$p' /etc/passwd 过滤shnne到最后一行
sed '2s#old#new#g' file.txt替换内容 2代表行号
find ./ -type f -name "*.txt"|xargs sed -i 's#boy#girl#g' 查找替换内容
sed -i 's#girl#boy#g' `find ./ -type f -name "*.txt"`查找替换内容
ls|sed -r 's#(.*)#mv \1 /tmp#g'|bash查找移动文件
sed = 1.txt |sed 'N;s#\n# #' 显示行号
sed -nr 's#(^[a-z]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd 第一个和最后一个对调
sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd
sed '1,3s#C#--&--#g' person.txt #→此处&等于C
ls *.jpg|sed -r 's#(^.*)_finished.*#mv & \1.jpg#g'|bash  &就代表前面匹配到的
sed -rn 's#^.*HTTP/1\.[10]" ([0-9]{3}) .*$#\1#gp' nginx.log 统计nginx访问日志log后面的状态码
sed 's#[a-z]#\u&#g' file.txt 把小写字母换成大写字母
sed 's#.##2' file.txt 删除文件每行的第二个字符,g是代表全部
sed -r 's#(.).(.*)#\1\2#g' file.txt 删除文件每行的第二个字符
sed -i "3a $(sed '1d' 1.txt |xargs|sed -r 's# #\\n#g')" 2.txt 把第一个文件中的第2、3行内容添加到第二个文件的第3行后面
sed -n '2,3p' 1.txt |xargs|sed -r 's# #\\n#g'|sed 's#.*#sed -i "3a &" 2.txt#g'|bash

评论