我已将一些字符串重定向到一个参数:ab=jyoti,priya, pranit
我有一个文件: Name.txt ,其中包含 -
jyoti
prathmesh
John
Kelvin
pranit
我想删除Name.txt文件中包含 ab 参数的记录。
请建议是否可以这样做?
答案 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元字符的字符串,这不是完全健壮的,但是如果你只是需要