Bash
比較兩個 URL 列表並將新添加的 URL 列印到新文件
我最初生成了兩個包含 URL 列表的文件——我將它們稱為
old
和new
。我想比較這兩個文件,如果文件中有任何new
不在文件中的URLold
,我希望將它們顯示在extra_urls
文件中。現在,我已經閱讀了一些有關使用
diff
命令的內容,但據我所知,這也分析了資訊的順序。我不希望訂單對輸出產生任何影響。我只想將額外的 URLnew
列印到extra_urls
文件中,無論它們在其他兩個文件中的任何一個中以什麼順序放置。我怎樣才能做到這一點?
您可以使用該
comm
命令比較兩個文件,並有選擇地顯示一個或另一個唯一的行,或共同的行。它需要對輸入進行排序,但您可以使用程序替換對它們進行動態排序。comm -13 <(sort old.txt) <(sort new.txt)
如果您使用的版本
bash
不支持程序替換,則可以使用命名管道對其進行模擬。Wikipedia中顯示了一個範例。
我只會使用
grep
:grep -vFf old new > extra_urls
解釋
-f
: 告訴grep
從文件中讀取其搜尋模式。在這種情況下,old
。-v
: 告訴 grep 反轉匹配,只列印不匹配的行。-F
: 告訴 grep 將其搜尋模式解釋為字元串,而不是正則表達式。這樣,.
URL 的 將按字面意思匹配。結合起來,這些可以
grep
列印任何new
不在old
. 文件中 URL 的順序無關緊要。