a #append text,新增行,在匹配到的行后 i #insert text,插入行,在匹配到的行前 d #delete pattern space,删除匹配到的行 s #substitute regex,替换,需要使用正则表达式 p #print the current pattern space,打印匹配到的行 c #replace line with text,替换匹配行的内容 r #append contents of file,相当于a参数,只不过这个是读取的文件 w #write pattern space to file,将匹配到的内容输出到另外的文件,不动源文件,等于另存为。
INPUT-FILE:
需要操作的文件
例子
1 2 3 4 5 6 7 8 9 10 11 12 13
#下面所有操作基于的文件 nl test.sh
1 #!/bin/zsh 2 j=1 3 cd ~ 4 for i in `ls` 5 do 6 a[$j]=$i 7 ((j++)) 8 done 9 echo ${a[*]}
新增
1 2 3 4 5 6 7 8 9 10
#举例:在第四行后添加”四叶草“ 不使用正则表达式 sed '4a 四叶草' test.sh #最好在a与后面文字间留空格,虽然不留空格也行
#在第四行和第六行后添加”四叶草“ sed '/[4,6]/a 四叶草' test.sh
#在第四行第五行第六行后添加”四叶草“ sed '4,6a 四叶草' test.sh
1 2
#举例:在有do的前一行添加”四叶草“ sed '/do/i 四叶草' test.sh
删除
1 2
#举例:删除以5开头的行 sed ‘/^5/d' test.sh
1 2 3 4 5 6 7 8 9
1 #!/bin/zsh 2 j=1 3 cd ~ 4 for i in `ls` 6 a[$j]=$i 7 ((j++)) 8 done 9 echo ${a[*]}
替换
1 2
#举例:将2到最后一行所有i替换为jc sed '2,$s/i/jc/g' test.sh
1 2 3 4 5 6 7 8 9 10
1 #!/bin/zsh 2 j=1 3 cd ~ 4 for jc jcn `ls` 5 do 6 a[$j]=$jc 7 ((j++)) 8 done 9 echo ${a[*]}
取指定行
1 2
#举例:打印第一行内容 sed -n '1p' test.sh
1
1 #!/bin/zsh
1 2
#举例:打印5到最后一行内容 sed -n '5,$p' test.sh
1 2 3 4 5 6
4 for i in `ls` 5 do 6 a[$j]=$i 7 ((j++)) 8 done 9 echo ${a[*]}
替换匹配行
1 2
#将有do的行都替换为“四叶草” sed '/do/c 四叶草' test.sh
1 2 3 4 5 6 7 8 9 10
1 #!/bin/zsh 2 j=1 3 cd ~ 4 for i in `ls` 四叶草 6 a[$j]=$i 7 ((j++)) 四叶草 9 echo ${a[*]}
读取文件内容
1 2 3 4 5
#在所有的j后面添加com.txt中的内容 cat com.txt 滑小稽你最近有点皮是不是
sed '/j/r com.txt' test.sh
1 2 3 4 5 6 7 8 9 10 11 12 13
1 #!/bin/zsh 2 j=1 滑小稽你最近有点皮是不是 3 cd ~ 4 for i in `ls` 5 do 6 a[$j]=$i 滑小稽你最近有点皮是不是 7 ((j++)) 滑小稽你最近有点皮是不是 8 done 9 echo ${a[*]}
写入文件
1 2
#将5到7行内容写入到file.txt中 sed '5,7w file.txt' test.sh
执行多个操作
1 2
#将j换成jjjjjj,将i换成iiiiiii sed -e 's/j/jjjjjj/' -e 's/i/iiiiiii/' test.sh
1 2 3 4 5 6 7 8 9 10
1 #!/biiiiiiin/zsh 2 jjjjjj=1 3 cd ~ 4 for iiiiiii in `ls` 5 do 6 a[$jjjjjj]=$iiiiiii 7 ((jjjjjj++)) 8 done 9 echo ${a[*]}
直接修改文件
1
sed -i '1i 这是直接修改的' test.sh
1 2 3 4 5 6 7 8 9 10 11
这是直接修改的 1 #!/bin/zsh 2 j=1 3 cd ~ 4 for i in `ls` 5 do 6 a[$j]=$i 7 ((j++)) 8 done 9 echo ${a[*]}
h:pattern space > hold space (把模式空间中的内容覆盖至保持空间中) H:pattern space >> hold space (把模式空间中的内容追加至保持空间中) g:hold space > pattern space (从保持空间取出数据覆盖至模式空间) G:hold space>> pattern space(从保持空间取出内容追加至模式空间) x:pattern space <> hold space (把模式空间中的内容与保持空间中的内容进行互换) n:读取匹配到的行的下一行覆盖 至模式空间 N:读取匹配到的行的下一行追加 至模式空间 d:删除模式空间中的行 D:删除 当前模式空间开端至\n 的内容(不再传 至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed