https://www.runoob.com/linux/linux-comm-sed.html
sed命令很多,记住语法定义。

关于-n的用法:https://zhuanlan.zhihu.com/p/442286256

sed -i 命令详解

https://blog.51cto.com/u_15576159/5301918

# 对每行匹配到的第一个字符串进行替换
sed -i 's/原字符串/新字符串/' ab.txt 

# 对全局匹配上的所有字符串进行替换
sed -i 's/原字符串/新字符串/g' ab.txt 

# 删除所有匹配到字符串的行
sed -i '/匹配字符串/d'  ab.txt  

# 特定字符串的行后插入新行
sed -i '/特定字符串/a 新行字符串' ab.txt 

# 特定字符串的行前插入新行(匹配到几个就插入几个)
sed -i '/特定字符串/i 新行字符串' ab.txt

# 把匹配行中的某个字符串替换为目标字符串
sed -i '/匹配字符串/s/源字符串/目标字符串/g' ab.txt

# 在文件ab.txt中的末行之后,添加bye
sed -i '$a bye' ab.txt   

# 对于文件第3行,把匹配上的所有字符串进行替换
sed -i '3s/原字符串/新字符串/g' ab.txt 

插入

https://www.cnblogs.com/liujiaxin2018/p/14988775.html

替换

方案1:使用冒号作分隔符

sed替换 - 含反斜杠(/)和Shell变量

test-sed.txt中的内容如下:

aaa/bbb/ccc/ddd/eee

fff/ggg/ss

我要将其中的“ccc/ddd”替换为“CCC/DDD”。那么Shell(Bash)脚本应该为:

NEW_STRING="CCC/DDD"

sed -i "s:ccc/ddd:${NEW_STRING}:" test-sed.txt

其中:

1、s后的冒号(:)是分隔符,而不是使用默认的反斜杠(/)。

2、替换字符串是变量时,需要使用双引号。

方案2:转义
将/用转义字符"\/"替换

  • sed替换变量字符串
    https://www.yii666.com/article/580116.html
    echo 变量| sed ...

  • 模糊查找并替换
    find /etc -type f -name www.conf | xargs sed -i "s/^listen = \S*/listen = 9000/"
    上面脚本表示将/etc/www.conf文件里listen = xxxxx的字符串替换为listen = 9000,\S*表示模糊匹配任意字符


0 条评论

发表回复

您的电子邮箱地址不会被公开。