2014-03-12 38 views
0

我已經重定向一些字符串到爲前一個參數字符串:ab=jyoti,priya, pranit 我有一個文件:Name.txt包含 - jyoti prathmesh John Kelvin pranit如何刪除這是目前在參數從文件中UNIX

我想要從Name.txt文件中刪除包含在ab參數中的記錄。

請建議這是否可以做到?

回答

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元字符的字符串完全健壯的,但如果你只需要

+0

是刪除存在於ab參數中的字符串,但是我只想知道如何從ab變量中存在的Name.txt中刪除該字符串。 :(我沒有得到任何答案,將從Name.txt中刪除這些值。請建議我是否可以完成? – Pooja25

+0

我可以將ab變量中的值重定向到另一個文件中(例如:echo $ ab> test.txt )如果變量很難實現 – Pooja25

+0

如果您的'sed'支持'-i'選項,那麼您可以使用'sed'變體進行就地編輯。如果您喜歡'grep'解決方案,則需要將其保存到臨時文件並將其移到原始文件上,或者使用Perl。 – tripleee

0

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

嘗試(使用\b假設你需要的單詞邊界)

+0

但參數ab中的值可能每次都不相同。那麼這可以放在這裏呢?有沒有什麼方法可以放置$ ab,以便它可以從該參數中獲取所有值? – Pooja25

+0

這可能在sed中嗎? – Pooja25

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 
+0

但它不從Name.txt文件中刪除這些參數。我想從abc.txt – Pooja25

相關問題