我想管道貓輸出文件到sed模式。 假設我有2個文件:color.txt和duplicate.txt。 color.txt包含3種顏色:藍色,綠色,紅色和duplicate.txt包含綠色。 我想使用sed從color.txt文件中刪除綠色。如何管道貓到sed模式
我嘗試這樣:
cat duplicate.txt | sed "/$/d" < color.txt
不幸的是,這是行不通的。任何建議如何做到這一點?
我想管道貓輸出文件到sed模式。 假設我有2個文件:color.txt和duplicate.txt。 color.txt包含3種顏色:藍色,綠色,紅色和duplicate.txt包含綠色。 我想使用sed從color.txt文件中刪除綠色。如何管道貓到sed模式
我嘗試這樣:
cat duplicate.txt | sed "/$/d" < color.txt
不幸的是,這是行不通的。任何建議如何做到這一點?
我想你的意思是這樣的:
sed "/$(cat duplicate.txt)/d" color.txt
但是,因爲你可以從評論說,這種做法不是很明智。我敦促你使用其他解決方案之一。儘管我不會刪除這個答案,因爲它顯示了你想學習的技巧。
如果duplicate.txt有多行,這不會給語法錯誤嗎?另外,它也會刪除部分匹配的行。不知道這是OP想要的。 – codeforester
@codeforester是的,我把問題的意思是隻有一行,因爲給出的例子和它被稱爲*「重複」*而不是*「重複」*的事實。雖然我猜這個邏輯,它應該是*「colors.txt」*但它不是:-) –
部分匹配可以通過添加字邊界來克服,但OP在這個問題上不是特定的。我試圖演示OP所要求的技術 - 即如何將文件的內容用作「sed」的模式。我同意你的解決方案在技術上更加準確,我的觀點更接近OP似乎試圖實現的概念 - 以標題爲標題。我會爲你投票 –
您可以使用grep
達到你想要的東西:
grep -Fxvf duplicate.txt color.txt
-F
來治療duplicate.txt行字符串而不是模式-x
在color.txt-v
來提取不匹配的行-f
將字符串從duplicate.txt中提取到與color.txt匹配無論您的文件有多少模式,這都可以工作。對於非常大的文件,你可能想看看這篇文章:
而在這種情況下,grep
的解決方案是不夠的,有時我用這樣的命令:
sed 's|.*|/^\1$/d|' duplicate.txt | sed -i -f - color.txt
這裏先sed
調用轉換將每行從duplicate.txt轉換爲適當的sed
命令以刪除所需的內容。這會產生一個sed
腳本,然後使用-f -
傳遞給第二個sed
,其中-
文件名稱表示標準輸入。
* nix utils通常可以處理文件,並且以這種方式使用cat廣泛地被認爲是「[UUOC](http://porkmail.org/era/unix/award.html)」... a「無用的貓「。正如你會在答案中看到的(到目前爲止)他們通常不使用'cat'。 –