Linux sed command

Source:
1. linux的sed命令详解
2.Linux基础 ——- 文本处理利器sed

Basic

sed [-option] ‘command’ filename

常用选项

-n: 使用安静模式。 一般sed的用法上, 所有来自stdin的资料一般都会列在荧幕上,加上-n, 只会显示经过sed 处理的那一行
-e: 直接在指令列模式上进行 sed 的动作模式
-f: 执行包含 sed 命令的文本
-r: 支持延伸性正规表达式
-i: 直接修改读取的档案内容,不是荧幕输出

常用命令:

a: 新增 , a 后可以接字符串,而这些字串会出现在新的一行
c: 取代, c 的后面接字串,这些字串可以取代n1,n2 之间的行
d: 删除
i: 插入:i 的后面接字串,会出现在新的上一行
p: 列印, 输出
s: 取代, 可以直接进行取代的工作

Example

if we have a.txt

$ cat a.txt
1a 1b 1c
2a 2b 2c
3a 3b 3c

删除某行

sed ‘1d’ a.txt
2a 2b 2c
3a 3b 3c

输出会显示没有第一行的结果,但 a.txt 并没有改变
如果使用 -n, 则不会输出这些。

sed ‘$d’ a.txt 删除最后一行,$ 是最后一行
sed ‘1,2d’ a.txt 删除第1到2行

显示某行

sed -n ‘1p’ a.txt 显示第一行
sed -n ‘/python/p’ a.txt 显示有 python 的行

增加行

sed ‘1a abcd’ a.txt
1a 1b 1c
abcd
2a 2b 2c
3a 3b 3c

sed ‘1,3a abcd\nefgh’ a.txt 第1和3行后加了两行abcd,efgh。 \n换行

替换行

sed ‘1c abcd’ a.txt
abcd
2a 2b 2c
3a 3b 3c

sed ‘1,2c Hi’ a.txt 第1和2行都替代成 Hi

替换某部分

sed ‘s/abc/edf/g’ 替换 abc 为 edf

sed中的元字符(使用于正则表达式)

^ : 行开头
$ : 行结束
. : 任意非换行字符
* : 零个或多个字符 如/.*/
[] : 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^] : 不匹配指定范围的字符,与[]相反
.. : 捕获组
& : 保存搜索字符用来替换其他字符,如s/love/&/,love这成love
\<( \>) : 锚定单词的开始
x{m} : 重复字符x,m次,如:/0{5}/匹配包含5个o的行。
x{m,} : 重复字符x,至少m次,如:/o{5,}/匹配至少有5个o的行。
x{m,n}: 重复字符x,至少m次,不多于n次,如:/o{5,10}/匹配5–10个o的行。

Other Example

sed ‘/ab/a\xxx’ a.txt

将 a.txt 中含有ab的行下面插入一行字符串 xxx

sed ‘/ab/cAB=AB’ a.txt

将a.txt中含有ab的行整行替换成AB=AB

sed ‘/^abc/{=}’ a.txt

=: 为显示行号。 以abc开头的关键词所在的行号

你可能感兴趣的:(Linux sed command)