linux shell sed使用

  • 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'
 #输出
efgh
abcd         

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

$echo "hello world" | sed 'a\ hello man'
#输出
hello world
hello 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#将文件中遇到换行符的行进行行数和行内容进行打印
1
hello world
2
hello man

l:用于列出行

cat data
this    is  a   dog#间隔是\t
sed -n 'l' data
this\t\is\t\a\dog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值