我有这个sed
命令用于删除标签内的数字:
sed 's/\(<[^0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g'
但有谁知道我如何从中排除某些字符串?
现在会是这样,输入:
<user1></user1>
<password2></password2>
并输出:
<user></user>
<password></password>
但是,我希望能够排除某些字符串,例如password2,那么输出将如下所示:
<user></user>
<password2></password2>
答案1
您可以预处理文件,为要列入白名单的字符串插入特殊字符,以防止它们被替换。
就像你会改变:
<user1></user1>
<password2></password2>
到
<user1></user1>
<|password2><|/password2>
首先并用于s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g
替换。如果|
可能已经出现在输入中,您可以使用类似以下的方案来转义它们:_
-> _u
, |
->_p
之后您可以撤消它们。
sed '
s/_/_u/g;s/|/_p/g
s:<\(/\{0,1\}password2>\):<|\1:g
s:<\(/\{0,1\}othertag>\):<|\1:g
s/\(<[^|0-9>]*\)[0-9]*\([^0-9]*>\)/\1\2/g
s/|//g;s/_p/|/g;s/_u/_/g'