Linux文本处理命令sed

sed用于文本搜索,替换,过滤等操作,功能比较强大。通过简单的命令,可实现很多功能。

一、sed的基本命令

sed的基本命令有很多,学sed也就是学习这些命令的灵活运用。我就列出我觉得比较常见的。

1、 p 打印匹配行;
2、 d 删除定位行;
3、 r 从另一个文件中读取文本;
4、 w 重定向文本到另一个文件 w要包含在分号里;
5、 = 显示文本行号;
6、 s 替换文本,最常用的;
7、 q 第一个模式匹配完后退出;
8、{} 在定位行执行命令组;
9、a 在匹配行的新一行新增,关键在于是在下一行新增; sed 1a 在第一行的后面(新起一行),sed1,3a tea 在1到3行的每一行都加上tea,tea要新起一行;
10、c 会替代匹配行; 他是取代行,和s取代字符串不同。

二、sed定位文本方式:

1、x x为行号;
2、x,y x行到y号 3、/pattern/ 匹配pattern的行; 4、x,y! 表示不包括x和y行的行;
5、/pattern/,x; 定位匹配模式行到x行; 6/ x,/pattern/ x行到匹配的模式行;

三、sed的选项

  • -n选项,会取消所有默认的输出;
  • -e 对文本行进行多项sed命令,要用这个选项;
  • -f 指定执行sed命令的文件名。 sed -f mycmd.sed input.file;

四、打印文本

打印文本:
1、sed -n '2,3p' dup.txt 打印2,到3行。
2、模式匹配:模式打印还有些不同。 sed -n '/pattern/'p dup.txt

3、x,/pattern/ 打印x行到下一个模式匹配行; sed -n '4,/pattern/'p dup.txt
4、/pattern/,x 打印匹配行到x之间的行内容;
5、打印奇数行:sed -n '1~2p' dup.txt
6、打印偶数行: sed -n '2~2p' dup.txt

五、替换文本

1、替换整行

sed '/lina/c haibo' duplicate.txt; 该命令将含有lina字符串的行全部替换为haibo。

2、替换字符串 用命令s

命令格式:sed start[,end] s/pattern/string/[g p w n]

如果不加g,默认情况下只替换第一次出现的模式,而加g之后,会替换全局模式。当然这里说的只替换第一次出现模式指的是每行的第一次,而不是全文本的第一次,这个一定要注意。也就是说加不加g,都会匹配全文,只是不加g只匹配每行的第一次。

  1. sed 's/haibo/lina/' dup.txt
    lina I love you,haibo lina I love you
  2. sed 's/haibo/lina/g' dup.txt
    lina I love you,lina
    lina I love you

  3. sed 's/haibo/lina/w lina.txt' dup.txt</code< 该命令是将替换的文本重定向到lina.txt中。

  4. & 保存搜索字符用来替换其他字符。 如: sed 's/lina/& haibo/' duplicate.txt 替换所有haibo变为 lina haibo

  5. shell中传入值。

    va='haibo'
    sed "s/lina/$va" dup.txt 必须得用双引号。

六、删除文本

删除文本:
这个比较简单,删除都是一行为单位的,一共有三种模式:
1、删除某行 sed 'md' te.txt m是指某一行;
2、删除一个范围 sed 'm,nd‘ t.txt 删除m到n行。
3、删除模式行 sed '/pattern/d' t.txt 。

七、快捷命令

快捷命令:

1、删除以句点结尾的行。 /.$/d
2、删除包含abcd的行。 /abcd/d
3、删除一个以上空格,用一个空格替代。 s/ [[:space:]]+/ /g。[[:space:]]只用在匹配模式下。
4、删除行首空格。 s/^[[:space:]]//g
5、删除空行。 /^$/d。
6、删除第一个字符。 s/^*{1}/g
7、删除紧跟COL的后三个字母。 's/COL/(...)\//g'
8、将tab键替换为空格 's/\t/ /g'
9、打印最后一行 sed '$p'
10、打印整个文本 sed '1,$p'

--------EOF---------
微信分享/微信扫码阅读