一、sed命令,在匹配行前面,后面添加一行
单引号内的选项:a代表after,i代表in front
sed 后面的i代表是直接在文本内进行操作,就是直接改变文本内容,不加这个i,就是改变后在屏幕输出,文本并没有实际改变!
参考模板:
# sed -i '/匹配行/a\添加内容' 文件名
# sed -i '/匹配行/a \添加内容' 文件名
# sed -i '/匹配行/a \添加内容\' 文件名
具体举例:
# sed -i '/name/a\zhangsan' filename
# sed -i '/name/a \zhangsan' filename
# sed -i '/name/a \zhangsan\' filename
如果想在匹配行前面进行插入,那么把上面的 a 变成 i 就可以了!
# sed -i '/匹配行/i\添加内容' 文件名
# sed -i '/匹配行/i \添加内容' 文件名
# sed -i '/匹配行/i \添加内容\' 文件名
二、Linux shell程序中的 sed 的 s/$// s/ *//g /^$/d 是什么意思?
s/$// 在每一行后面追加空. s为搜索 如s/a/b/ 搜索a 将替换为b ,并只替换一次.
s/ *//g 将空格删除. g代表搜索到的全部替换 。“空格星”( " *") 代表多个空格
/^$/d 删除空行.
三、如何用sed在特定行行尾追加内容?
在文件的以XXX开头的行的行尾追加内容为YYY,$代表行尾,分割符号可以灵活选择
# sed -i '/^XXX/ s/$/YYY/' filename
# sed -i '/^XXX/ s:$:YYY:' filename
# sed -i '/^XXX/ s#$#YYY#' filename
在文件的以XXX开头的行的行首追加内容为YYY,^代表行尾,分割符号可以灵活选择
# sed -i '/^XXX/ s/^/YYY/' filename
# sed -i '/^XXX/ s:^:YYY:' filename
# sed -i '/^XXX/ s#^#YYY#' filename
下面方式同样可以实现在在特定行行尾追加内容
# sed -i '/XXX/s/$/& YYY/' filename
# sed -i '/XXX/s/^/& YYY/' filename
可以看出 &符合和追加的内容之间的空格决定了,追加的空格。
四、怎样在sed中做变量引用?
1. eval sed ’s/$a/$b/’ filename
2. sed "s/$a/$b/" filename
3. sed ’s/’$a’/’$b’/’ filename
4. sed s/$a/$b/ filename
五、综合应用举例
# sed \
-e '/^nexus-args/ s:$:,${jetty.etc}/jetty-https.xml:' \
-e '/^application-port/a \application-port-ssl=8443\' \
-i /etc/nexus-default.properties
-e 表示多点编辑,用于在一条命令中对同以文件做多次操作
-i 在这个位置表示直接修改文件,不是插入行的意思
# sed \
-r '/<Set name="(KeyStore|KeyManager|TrustStore)Password">/ s:>.*$:>nexus@123</Set>:' \
-i /etc/jetty/jetty-https.xml
# cat /etc/jetty/jetty-https.xml
-
-r 表示启用sed的扩展正则
# man sed
# cat /etc/jetty/jetty-https.xml
六、参考
Linux sed命令
https://www.runoob.com/linux/linux-comm-sed.html
sed操作:指定行增加删除内容
https://blog.csdn.net/m0_37886429/article/details/79043158
sed中支持变量的处理方法
https://www.cnblogs.com/tiantianhappy/p/9139751.html