2018-12-5笔记
Sed基础用法
语法格式:
$ sed [options] '{range command}' {input files}
options
-
-n
,抑制默认输出 -
-e
,执行多条命令 -
-f
,执行sed
脚本文件 -
-i
,直接修改源文件,-ibak
会生成源文件的备份文件
range
使用行号
- 指定行,
sed -n '2 p' fname.txt
- 逗号,
sed -n '2, 4 p' fname.txt
,sed -n '2, $ p' fname.txt
- 加号
- 波浪号,
sed -n '2~4 p' fname.txt
使用模式
- 单一模式,
sed -n '/hello/ p' fname.txt
,与指定的行号一样,指定存在hello
的行 - 模式与数字,
sed -n '/hello/, 4 p' fname.txt
,相当于取第一次出现hello
的行号,作为起始行号,因此结束行号也可以用模式替代。注意点,如果前4行没有hello
,则退化成1
- 模式与加号
commands
-
p
,打印行 -
d
,删除行 -
w fname.txt
,保存行到文件
替换命令
替换命令的语法格式为,s/search/replacement/flags
,例如
$ sed 's/hello/hi/' fname.tx
以默认的替换方式(没有flags
),将fname.txt
中的hello
(search
)替换成hi
(replacement
)
上述的/
属于命令分界符,还可以使用#
、 @
、 !
作为分界符,避免出现烦人的转义。
search
- 使用确定性文本进行搜索,例如
hello
,Tom
等 - 使用正则表达式进行搜索
replacement
- 使用确定性文本
- 引用正则表达式的分组
-
&
用于表示匹配到的search
,相当于Pythonre
的group(0)
- 括号分组使用
\1
开始(最多9个分组,即\9
),用于进行分组回溯
-
- GNU专用
以下主要用于replacement
中,主要是结合分组来使用,不然实际意义不大,因为分组匹配出来的文本是符合某个模式的,我们并不知道实际文本如何。- 持续型转换
-
\U
,大写模式,将其后的所有分组变成大写 -
\L
,小写模式,将其后的所有分组变成小写 -
\E
,正常模式,不改变分组的大小写
-
- 单字符型
-
\u
,转换其后第一个字符为大写 -
\l
,转换其后第一个字符为小写
-
- 持续型转换
flags
-
g
,sed
默认只替换第一个,使用全局标志g
,可以实现全部替换,相当于times,默认为1
- 数字标志,相当于
start
,第几个开始执行替换 -
p
,打印替换后的行,需与-n
一起使用 -
w fname.txt
,将替换后的行写入文件 -
i
,忽略search
的大小写(仅用于GNU的sed
) -
e
,将替换后的行作为shell命令执行
网友评论