linux shell sed使用

来源:互联网 发布:怎样学软件编程课程 编辑:程序博客网 时间:2024/06/10 21:36
  • sed option script file
    -e script:在处理输入时,将script中指定的命令添加到运行命令中
    -f file:在处理输入时,将file中指定的命令添加到运行命令中
    -n:不要为每个命令输出,等待print命令输出
  • s命令:s命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串

sed编辑器自身不会修改文本文件的数据,他只是将修改后的数据发送到STDOUT。如果查看原来的数据,它任然保留着原始数据

$ echo "this is a test" | sed 's/test/big test/'this is a big test
  • sed命令-e选项:命令行上执行多个命令时,命令之间必须用分号分割,并且命令末尾和分号之间不能有空格
$ echo "the quick brown for jumps over the dog" | sed -e 's/brown/green/; s/dog/cat'echo "the quick green for jumps over the cat#或者使用次提示符来分割命令$ sed -e 's/brown/green/s/dog/cat/s/for/elephant/' data1
  • sed的4中可用的替换标记
    数字:表示新文本将要被替换第几处模式匹配的地方
    g:表示新文本将要替换所有已有文本出现的地方
    p:表明原来的行要打印出来
    w file:将替换结果写到文件中
$sed 's/test/trial/2' data$sed 's/test/trial/g' data$sed -n 's/test/trial/p' data#-n与p的结合使用就是不将原行内容打印出来,只输出修改的行#有些文本中含有像正斜线‘/’分隔符,需要使用反斜线‘\’来进行转义$sed 's/\/bin\/bash/\/bin\/ksh/' etc/passwd#也可以使用其他的分隔符来进行字符串分割$sed 's!/bin/bash!/bin/ksh!' etc/passwd
  • 如果只想将命令作用与特定的行或某些行,需要使用行寻址
    [address]command
#只替换第二行$sed '2s/dog/cat/' data#只替换第二行和第三行$sed '2,3s/dog/cat/' data#替换某行到行尾$sed '2,$s/dog/cat/' data
  • 使用文本模式过滤器
    /pattern/command
#将含有this字符串行的dog替换为cat$sed '/this/s/dog/cat/' data
  • sed 删除行
#单行删除,将第3行删除$sed '3d' data#范围删除,删除2到3行$sed '2,3d' data#删除第二行到尾部$sed '2, $d' data#以上是通过删除指定行,也可以通匹配内容来删除,遇到1,数据流打开,直到遇到3,将数据流关闭,期间内容都会删除$sed '/1/,/3/d' data
  • 插入和附加文本

    1.插入(insert):命令i会在指定行前增加一个新行

 $echo "abcd" | sed 'i\ efgh' #输出efghabcd         

2.追加(append):命令a会在指定行后增加一个新行

$echo "hello world" | sed 'a\ hello man'#输出hello worldhello man

同理,也可以在指定位置进行插入和追加,就像在指定位置进行删除操作

$sed '3a\hello world' data#第3行追加$sed '2i\hello man' data#第二行前插入$sed '$a\hello gril' data#尾部追加
  • sed之修改
    chang:同追加和插入,必须要指定新行
$sed '3c\hello world' data#将第三行修改为$sed '/hello/c\world' data#将匹配到hello的行修改为world$sed '2,3c\hello world' data #进行范围修改行
  • sed之转换
    transform:y命令是唯一可以处理单个字符的编辑命令,inchar 和outchar首先是长度要一样,不然会报错,二是将inchar第一个字符转为outchar第一个字符,依次类推。转换是全局命令,会找到文件中出现的指定字符进行转换。
$sed 'y/123/456' data#将1转为4,2-5,3-6
  • sed之打印
    p:小写p用于打印文本行
sed -n '/number/p' data#将匹配到number字符串行进行打印,n代表不打印未匹配到的行

=:用于打印行号

sed '=' data#将文件中遇到换行符的行进行行数和行内容进行打印1hello world2hello man

l:用于列出行

cat datathis    is  a   dog#间隔是\tsed -n 'l' datathis\t\is\t\a\dog
原创粉丝点击