我已經重定向一些字符串到爲前一個參數字符串:ab=jyoti,priya, pranit
我有一個文件:Name.txt包含 - jyoti prathmesh John Kelvin pranit
如何刪除這是目前在參數從文件中UNIX
我想要從Name.txt文件中刪除包含在ab參數中的記錄。
請建議這是否可以做到?
我已經重定向一些字符串到爲前一個參數字符串:ab=jyoti,priya, pranit
我有一個文件:Name.txt包含 - jyoti prathmesh John Kelvin pranit
如何刪除這是目前在參數從文件中UNIX
我想要從Name.txt文件中刪除包含在ab參數中的記錄。
請建議這是否可以做到?
如果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元字符的字符串完全健壯的,但如果你只需要
這將做到這一點:
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
但它不從Name.txt文件中刪除這些參數。我想從abc.txt – Pooja25
是刪除存在於ab參數中的字符串,但是我只想知道如何從ab變量中存在的Name.txt中刪除該字符串。 :(我沒有得到任何答案,將從Name.txt中刪除這些值。請建議我是否可以完成? – Pooja25
我可以將ab變量中的值重定向到另一個文件中(例如:echo $ ab> test.txt )如果變量很難實現 – Pooja25
如果您的'sed'支持'-i'選項,那麼您可以使用'sed'變體進行就地編輯。如果您喜歡'grep'解決方案,則需要將其保存到臨時文件並將其移到原始文件上,或者使用Perl。 – tripleee