linux 字符串前添加内容,linux下在某行的前一行或后一行添加内容
linux的sed工具是十分强大的,能很容易的实现在某关键词的前一行或后一行增加内容。今天在批量修改tomcat的日志时就用到了该功能。如下是centos防火墙iptables的规则,以这段规则为例子*filter:INPUT DROP [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]#status-A INPUT -m state --state RE
linux的sed工具是十分强大的,能很容易的实现在某关键词的前一行或后一行增加内容。今天在批量修改tomcat的日志时就用到了该功能。
如下是centos防火墙iptables的规则,以这段规则为例子*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#status
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#loopback
-A INPUT -i lo -j ACCEPT
#icmp
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
#ssh
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#rsync
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
COMMIT
一、在某行的前一行或后一行添加内容
具休操作如下:匹配到的行前添加一行#zabbix
sed -i '/#rsync/i#zabbix' /etc/sysconfig/iptables
得到
#zabbix
#rsync
匹配到的行后添加一行#zabbix
sed -i '/#rsync/a#zabbix' /etc/sysconfig/iptables
#rsync
#zabbix
i和a我们分别这样记就好,i是行前加,a是行后加就好,懂英文的可以这么记a = after ,i = in front。
二、在某行(指具体行号)前或后加一行内容
具休操作如下:sed -i 'N;13a#zabbix' /etc/sysconfig/iptables
sed -i 'N;13i#zabbix' /etc/sysconfig/iptables
这里指定的行号是13行
三、删除指定行的上一行或下一行
具休操作如下:删除指定文件的上一行
sed -i -e :a -e '$!N;s/.*\n\(.*#rsync\)/\1/;ta' -e 'P;D' $file
删除指定文件的下一行
sed -i '/#rsync/{n;d}' /etc/sysconfig/iptables
删除指定字符串之间的内容sed -i '/#监控宝/,/#rsync/d' /etc/sysconfig/iptables
如果含有如下转义字符,需要在前面加反斜杠 \ 进行转义
$
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。
( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
*
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
.
匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ ]
标记一个中括号表达式的开始。要匹配 [,请使用 \[。
?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\\’ 匹配 “\”,而 ‘\(‘ 则匹配 “(”。
^
匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ }
标记限定符表达式的开始。要匹配 {,请使用 \{。
|
指明两项之间的一个选择。要匹配 |,请使用 \|。* . ? + $ ^ [ ] ( ) { } | \ /
更多推荐
所有评论(0)