s命令
1.1、s命令的作用

替换匹配到的内容。

提取匹配到的内容。

1.2、s命令的使用格式
s/regular expression/content/[xg]
m[,n]s/regular expression/content/[xg]

m,n,x ∈ [0, +∞]

xg表示忽略前面x-1行,从第x行开始进行替换。

s命令通常与-i选项一起使用。

注意:紧跟着s后面的一个字符被视作分割字符,常用的分割字符/#@等。regular expressioncontent中出现了分割字符的时候要么进行转义,要么就换成其他的分割字符

1.3、s命令的使用示例

示例1 ⤵︎

sed -i 's/fonts.googleapis.com/www.googlefonts.net/g' $(grep "fonts.googleapis.com" -rl ./)

示例2 ⤵︎

sed -i 's@downloads.openwrt.org@mirrors.tuna.tsinghua.edu.cn/lede@g' /etc/opkg/distfeeds.conf

这里用@作为分割字符而没有使用/作为分割字符的原因是/在后面的替换内容中出现了,为了表达式的清晰,而换了一个分割字符

示例3 ⤵︎

sed 's/^[ ]*//g' xx.txt

删除行首的空格。

示例4 ⤵︎

sed 's/[ ]*$//g' xx.txt

删除行尾的空格。

示例5 ⤵︎

echo "    abcd   " | sed 's/^[ ]*//' | sed 's/[ ]*$//'
echo "    abcd   " | sed -e 's/^[ ]*//' -e 's/[ ]*$//'

删除行首和行尾的空格,相当于trim

示例6 ⤵︎

sed -i "s/^/--&/g" xx.txt

在每行的开头添加字符。^代表行首。

示例7 ⤵︎

sed -i "s/$/&--/g" xx.txt

在每行的结尾添加字符。$代表行尾。

示例8 ⤵︎

echo "plugins=(zsh-syntax-highlighting zsh-autosuggestions)" | sed 's/).*$//'

将匹配到的内容替换为空格

\1 ~ \9

正则表达式中,为了便于提取某个模式匹配到的内容,会对某个模式进行分组sed也支持对分组引用,在sed中,最多支持对9分组引用

正则表达式中,(patten)表示一个分组,但是在sed中,要提取它,必须用\(patten\)

示例:

echo "english names=(wang dogs haha)" | sed 's/.*names=(\(.*\)).*/\1/'

这里,首先提取出括号中的内容wang dogs haha,并用它替换掉english names=(wang dogs haha),这样,实际上得到的就是提取出的内容。

$

$代表匹配到的内容。

示例:

echo "wang dogs haha" | sed 's/\w\+/[&]/g'