Shell编程基础-05-sed命令总结

sed主要用来编辑匹配到的文本,一般用法为:定位到某一行或某几行,然后对定位到的行或满足特定条件的内容进行增加删除修改替换或输出特定内容等操作

sed常用指令

  • 一、标准语法
  • 二、常用选项
  • 三、编辑命令
  • 四、打印
  • 五、删除
  • 六、文件执行
  • 七、词替换
    • 1、默认替换第一个匹配项
    • 2、如果单行有多个匹配项,可以通过尾缀g或数字来表示需要替换的范围
    • 3、行替换
    • 4、先后执行两条命令
    • 5、文件读写
    • 6、前后行追加
    • 7、替换内容

一、标准语法

1、COMMAND | sed [option] 'fromLine,toLine|//,//a\\' FILE #//,//正则匹配的两行之间,每对反斜杠之间都是一组筛选条件
2、COMMAND | sed [option] 'fromLine,toLine|//,// s\\' FILE #修改(整行替换)
3、COMMAND | sed [option] 'fromLine,toLine|//,// d' FILE #删除

二、常用选项

1、-e #下一个参数解释为sed命令(命令行出现多个sed命令时可以使用)
2、-f #后面跟保存了sed指令的文件,也就是执行文件里的sed指令
3、-i #更新文件的内容,等于vi编辑后保存
4、-n #取消默认输出

三、编辑命令

1、a #追加
2、c #修改
3、i #插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
4、d #删除
5、s #替换,通常这个s的动作可以搭配正规表示法
6、p #打印匹配行内容,通常和-n配合(取消默认输出,打印指定内容)
7、= #打印匹配行行号
8、n #读取第n+1行
9、r w #读出或写入文件

四、打印

通常 p 会与参数 sed -n 一起运行
1、sed ‘p’ FILE #每行输出两次(sed默认输出一行,p为打印每一行)
2、sed ‘1 p’ FILE #打印每一行(取消默认输出,1表示第一行,p为打印)
3、sed -n ‘1,3 p’ FILE #打印第1到3行
4、sed -n ‘/hadoop/ p’ FILE #打印带有hadoop的行
5、sed -n ‘/hadoop/,/json/’ p #打印从带有hadoop的行到json行之间的内容,需要唯一
6、sed -n ‘/^h/ p’ FILE #打印以h开头的行
7、sed -n ‘/(3|5|7)KaTeX parse error: Expected 'EOF', got '#' at position 11: / p' FILE #̲打印3、5、7结尾的行,其中对…/ p’ FILE #打印3、5、7结尾的行,通过加r变成强正则格式,就不用转义了
9、sed -n ‘1~2 p’ FILE #从第一行开始,每隔一行打印一次
10、sed -rn ‘^(h|t) /p’ FILE #待定

五、删除

因为是删除啊,所以 d 后面通常不接任何东西
1、sed ‘/^# d’ FILE #删除以#开头的行
2、sed -i ‘n,$d’ FILE #删除某一行到最后一行的数据

六、文件执行

1、sed -f cmd.sed FILE #从文件中执行 cmd.sed中内容,也就是执行文件内的sed命令

七、词替换

1、默认替换第一个匹配项

1)sed ‘1 s/ha/hadoop/’ FILE #把第一行中的ha替换为hadoop
2)sed ‘1,5 s/had/hadoop/’ FILE #把第1-5行中的ha替换成hadoop
3)sed ‘5,/ha/ s/ha/hadoop.’ FILE #把从第5行开始,一直到包含ha的行之间的,所有had的内容都替换成hadoop
4)sed ‘/ha/ s/had/hadoop/’ FILE #把所有包含ha的行里的had,替换为hadoop

2、如果单行有多个匹配项,可以通过尾缀g或数字来表示需要替换的范围

1)sed ‘1 s/ha/hadoop/g[i]’ FILE #把第一行中的所有ha替换为hadoop,若加i表示忽略大小写
2)sed ‘1 s/ha/hadoop/2’ FILE #把第一行中的第二个ha替换为hadoop
3)sed ‘/ha/ s/had/hadoop/gipw a.txt’ FILE #把包含ha的行中的所有had替换为hadoop并写到a.txt文件内(忽略大小写)
加g,全局搜索,处理匹配到的所有;不加g,每行只处理第一个匹配到的。

3、行替换

1)sed ‘/^h/c##########’ FILE #将在文件中以h开头的行替换为新行#################

4、先后执行两条命令

先后执行两条命令,将第一条命令的执行结果作为第二条命令的输入
1)sed -e ‘1,3 d’ -e ‘s/abc/def/g’ FILE #删除文件中的1-3行,将剩余行中的abc全部替换为def
2)sed -e ‘3,$ d’ FILE #删除文件中的第二行之后的所有行
3)sed ‘$ d’ FILE #删除文件中的最后一行

5、文件读写

1)sed ‘/^h/r FILEB’ FILEA #在文件A中以h开头的行后读入文件B的内容(插入新行)
2)sed ‘/^h/w FILEB’ FILEA #将文件A中以h开头的行写入文件B(覆盖模式)

6、前后行追加

1)sed ‘/^h/a###########’ FILE #在文件中以h开头的行的下一行追加新行#############
2)sed ‘/^h/i###########’ FILE #在文件中以h开头的行的前一行追加新行#############

7、替换内容

sed ‘/abc/{n; s/aaa/bbb/g}’ file #读取包含abc的行的下一行,替换aaa为bbb

你可能感兴趣的:(Shell,shell,linux)