如何从unix文件中删除参数中存在的字符串

时间:2014-03-12 07:21:28

标签: shell unix sed awk

我已将一些字符串重定向到一个参数:ab=jyoti,priya, pranit 我有一个文件: Name.txt ,其中包含 - jyoti prathmesh John Kelvin pranit

我想删除Name.txt文件中包含 ab 参数的记录。

请建议是否可以这样做?

3 个答案:

答案 0 :(得分:0)

尝试

sed -e 's/\bjyoti\b//g;s/\bpriya\b//g' < Name.txt

(假设您需要单词边界,使用\b

答案 1 :(得分:0)

这样做:

for param in `echo $ab | sed -e 's/[ ]+//g' -e 's/,/ /g'` ; do res=`sed -e "s/$param//g" < name.txt`; echo $res > name.txt; done
echo $res

答案 2 :(得分:0)

如果ab是shell变量,您可以轻松将其转换为扩展正则表达式,并将其与grep -E一起使用:

grep -E -x -v "${ab//,/|}" Name.txt

字符串替换${ab//,/|}返回$ab的值,每,替换为|,将其转换为扩展正则表达式,适合作为参数传递到grep -E

-v选项表示删除匹配的行。

-x选项指定匹配需要覆盖整个输入行,因此短子字符串不会导致整个较长的行被删除。如果没有它,ab=prat会导致pratmesh被删除。

如果您确实需要sed解决方案,那么转换应该相当简单。 grep -E -v -x 'aaa|bbb|ccc'相当于sed '/^\(aaa\|bbb\|ccc)$/d'(有些方言不喜欢反斜杠,有些则需要它们)。

要进行就地编辑(在没有临时文件的情况下修改Name.txt),请尝试以下操作:

sed -i "/^\(${ab//,/\|}\)\$/d" Name.txt

对于包含空格或其他shell元字符的字符串,这不是完全健壮的,但是如果你只是需要