今天用sed工具实现将文件中所有不包含特定字符串的行删除,发现要用正则表达式来匹配不等于某个字符串需要一点小的技巧。
例如要匹配不包含test字符串,首先想到:
但问题是这样会将包含tast或者tesa也删除。
最终的解决方案:
如果有更长的字符串,以此类推。
完整的sed命令:
sed -r 's/(^.*[^t].*$|^.*t[^e].*$|^.*te[^s].*$|^.*tes[^t].*$)//g' ./file > /tmp/file && mv /tmp/file ./file
例如要匹配不包含test字符串,首先想到:
[^t][^e][^s][^t]
但问题是这样会将包含tast或者tesa也删除。
最终的解决方案:
([^t].*|t[^e].*|te[^s]|tes[^t])
如果有更长的字符串,以此类推。
完整的sed命令:
sed -r 's/(^.*[^t].*$|^.*t[^e].*$|^.*te[^s].*$|^.*tes[^t].*$)//g' ./file > /tmp/file && mv /tmp/file ./file