• 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
    标签: sed
    评论数:0 阅读数:1182