2012-09-26 44 views
2

我想用sed來做到這一點。我有2個文件:如何在下一個sed命令中使用pipe的結果?

keys.txt: 
host1 
host2 

test.txt 
host1 abc 
host2 cdf 
host3 abaasdf 

我想用sed來刪除的test.txt包含在keys.txt關鍵字的行。所以test.txt的結果應該是

host3 abaasdf 

有人可以告訴我如何做到這一點與sed?

感謝,

+0

大約類似於http://stackoverflow.com/questions/7666149/command-substitution-within-sed-expression – tripleee

回答

2

我推薦使用grep這個(尤其是fgrep因爲沒有涉及到的正則表達式),所以

fgrep -v -f keys.txt test.txt 

做它的罰款。隨着sed很快這個工程:

sed -i.ORIGKEYS.txt ^-e 's_^_/_' -e 's_$_/d_' keys.txt 
sed -f keys.txt test.txt 

(這就地修改原始keys.txt - 與備份 - 爲sourceable sed腳本。)

+0

如果我做貓keys.txt | sed ...(刪除這個鍵)。我怎樣才能做到這一點? –

+0

你只是不能。 sed是有能力的,但沒有那種能力的AFAIK。 –

+0

對於'grep -f'的+1 +1 –

2

fgrep -v -f是最好的解決方案。這裏有幾個選擇:

commjoin

comm -13 <(join keys.txt test.txt) test.txt 

或AWK

awk 'NR==FNR {key[$1]; next} $1 in key {next} 1' keys.txt test.txt 
0

組合這可能會爲你工作(GNU SED):

sed 's|.*|/^&\\>/d|' keys.txt | sed -f - test.txt