sed常用命令
发布时间:2021-03-16 22:16:31
作者:ynkulusi
平时使用过的积累,留下方便参考
# sed 's/^/HEAD&/g' test.file 在每行的头添加字符,比如"HEAD"
# sed 's/$/&TAIL/g' test.file 在每行的行尾添加字符,比如“TAIL”
# sed 's/$/&\r/g' test.file 在行尾插入换行符(^M)
# sed 's/\n//g' 删除换行符
# sed 's/\r//g' 删除DOS文件中的回车符“^M”
# sed 's/\r/\r/g' 转换DOS回车符“^M”为真正的换行符
# sed 's/\\n/^M/g' 把文本中的\n符号换成真的换行符,^M使用Ctrl+v加Enter输入,也可以把^M写成\r
# sed 's#\s*\r\?$##' 删除行尾的空格以及DOS回车符。它没有使用“/”字符作为替换命令各个参数间的分隔符,而是使用了“#”字符。命令还使用了“\?”正则表达式,用来匹配它前面出现的字符0次或1次
# sed 's/^\n\{3}//' 删除三行空行
# sed 's/\n\n/\r/g' 将连续的两个空行替换成一个空行,sed '/^#\|^$/d' 和grep -v '^#\|^$' 同效
# sed -n '/^#\|^$/!p' /etc/ssh/sshd_config 过滤掉注释行和空白行
# sed 's/,/'"'","'"'/g' file #把file文件中的逗号替换成单引号逗号单引号(,换成’,’)
# sed '/book/{n;s/.*/xxx/}' test 把teset文件中匹配到book的下一行内容换成xxx
# sed 's/no\|NO/YES/' test 把test文件中的字符串no或者NO全部替换成YES
# sed 's/no/YES/i' test 功能同上,后面的i即忽略前面匹配部分大小写,大小写混合同样可匹配
# sed '1~2d' file #删除奇数行,过滤出偶数行;sed -n '1~2!p'
# sed '1~2!d' file #删除偶数行,过滤出奇数行;sed -n '1~2p'
# sed 'N;s/\n/ /' file 把file文件中偶数行内容合并到奇数行后面,空格隔开
# sed '$!N;s/\n/\t/' file 把file文件中两行合并,并把换行符换成制表符
# sed ':a;N;$!ba;s/\n/,/g' tel 把tel文件中的多行合并成一行,用逗号隔开每行
# sed '/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/' test #在AA开头的行尾插入 YES,其他行尾插入 NO
# sed '/^AA/s/$/ YES/;/^AA/!s/$/ NO/' test #同样实现以上功能
# sed '$!N;/\nAAA/!P;D' test 删除AAA的前一行
# sed '/AAA/{n;d}' test 删除AAA的后一行
# sed -e '/string/{n;d}' -e '$!N;/\n.*string/!P;D' file #删除匹配行的上一行和下一行
# sed -e '/'"$AA"'$/{n;d}' -e '$!N;/\n.*'"$AA"'$/!P;D' file #AA=string #变量指定匹配字符串; sed中使用变量,删除匹配行的上一行和下一行
# sed '/tmp/,+1d' test 删除test文件中匹配到tmp的行及后面一行
# sed '2,+3d' aa 删除文件aa中第二行,和后面的三行,共4行
# sed '$d' aa 删除文件aa中最后一行
# sed -n '/east\>/=' aa 输出文件aa中有east为单词尾的行号
# sed -n '$=' aa 计算并输出文件aa的行数
# sed -n '3,9p' aa 输出文件aa第3到第9行内容
# sed -n '1~3p' aa 从第1行开始,每间隔2行输出一行,2是由(3-1)来的
# sed -n '1,3{p}' file 输出文件file的第1到第3行
# sed -n '/west/,+2p' aa 打印包含west和后面两行的内容
# sed -n '/\<e/p' aa 打印含有以e为单词首字母的行
# sed -n '/e\>/p' aa 打印含有以e为单词尾字母的行
# sed '/e\>/a\\----list----' aa 在有以e为单词结尾的行下面插入一行,a\后的\表示换行
# sed '/^root/d' aa 删除文件aa中以root开头的行
# sed -i '/tom/,/$/d' test 删除test文件中第一次含有tom及后面的所有行
# sed '/root/,/sync/d' aa 删除文件aa中第一次含有root到第一次含有sync的之间所有行
# sed '1,4d' aa 删除文件aa中第1到第4之间所有行
# sed 'd' aa 删除文件aa中所有行
# sed -i '/^\s*$/d' sang.txt 删除文件sang.txt中所有空白行内容.\s* 所有空格内容,’/^$/d’也可以
# sed -i ‘s/^\s\+//’ ##删除行前空白
# sed -i’s/\s\+$//’ ##删除行后空白
# sed -n l aa 列出文件aa中的非打印字符,一般都是行尾加$符号,字母L的小写
# sed -n '$r /etc/issue' /etc/fstab 把/etc/issue文件的内容读取到/etc/fstab文件的末尾
# sed -n '/boot/w /tmp/test' /etc/fstab 把/etc/fstab文件中包含有boot的行存储到/tmp/test文件中
# sed -i '/^PermitRootLogin/s/no\|NO/yes/' /etc/ssh/sshd_config #把指定行中的no或者NO换成yes
# sed -n '/^--\|^\/\*/!p' file #把file文件中以--或者/*开始的行都过滤掉sed -i '/^--\|^\/\*/d' file
# sed '1s/:/---/' aa 把aa文件中第1行的第1个冒号:用---替换掉
# sed '3s/:/---/3 aa 把aa文件中第3行的第3个冒号:用---替换
# sed 's/:/---/g' aa 把aa文件中所有行的第所有冒号:用---替换掉
# sed 's/:/-&-/g' aa 把aa文件中所有行的冒号:替换成-:-,&符号表示被替换的内容
# sed -r 's/[0-9]{4}-[0-9]{2}-[0-9]{2}/& 9:00/' file #在年月日后面加上空格和时间,可用[[:digit:]]替换[0-9]
# sed '1{s/rhce/RHCE/g;s/RHCE/xxxx/}' bb 把bb文件中第1行所有的rhce替换成RHCE,并把第一行中第一个RHCE替换成xxxx,多次操作用{}括起来,分号;隔开命令
# sed -n '1{s/rhce/RHCE/g;s/RHCE/xxxx/;p}' bb p命令是输出模式空间的内容,-n不显示文件其余内容
# sed '/ONBOOT/cONBOOT=yes' ifcfg-eth0把ifcfg-eth0文件中ONBOOT行替换成ONBOOT=yes
# sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' aa 把aa文档中所有小写字母替换成大写字母
# sed -e 's/123/1234/' a.txt 将a.txt文件中所有行中的123用1234替换(-e表示命令以命令行的方式执行;参数s,表示执行替换操作)
# sed -e '3,5 a4' a.txt 将a.txt文件中的3行到5行之间所有行的后面添加一行内容为4的行(参数a,表示添加行,参数a后面指定添加的内容)
# sed -e '1 s/12/45/' a.txt 把第一行的12替换成45
# sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 批量处理通过grep搜索出来的所有文档,将这些文档中所有的oldstring用newstring替换(-i参数表示直接对目标文件操作)
# sed '$!{1~2{h;d}}; 0~2G' file #奇偶行内容互换
# sed -i '/[@\._]/!d' filename #删除没有@、点、_符号的行
# sed -n '/@[,]/p' filename #找出@符号后有逗号的行
# sed -n '/\..*@/p' filename #找出@符号前有点的行
# sed -n '/^[a-z,A-Z,0-9]/!p' #找出不是字母和数字开始的行内容
# sed -n '/[0-9]\{12,\}/p' filename #找出filename文件中连续12个以上数字的行
# sed -n '/^[0-9]\{0,3\}@/p' email #找出email文件中@前只有少于4个数字的邮箱账号
# sed -n '/^[0-9]\{0,5\}@qq.com/p' email #找出email文件中以数字开始位数少于5的qq邮箱
# sed -n '/^[a-z]\{0,5\}[0-9]\{1,8\}@qq.com/p' email #\{\}仅定义之前的一个位数范围
# sed -n '/^[a-z]\{0,2\}@/p' email #找出email中@前仅包含2个及以下字母的行
# sed -i '/^[a-z]\{1,3\}@sxxl.com/d' email #删除email文件中,@前少于4个字母的行
分类:bash
评论数:0
阅读数:1182