簡體   English   中英

如何使用bash找到某個文件中的哪些行不是由另一個文件中的行啟動的?

[英]How can I find which lines in a certain file are not started by lines from another file using bash?

我有兩個文本文件,A和B:

A:

a start
b stop
c start
e start

B:

b
c

如何使用shell(bash ...)命令找到A中哪些行不是由B行開始的。 在這種情況下,我想得到這個答案:

a start
e start

我可以使用一行命令來實現嗎?

這應該做:

sed '/^$/d;s/^/^/' B | grep -vf - A

sed命令將從文件B獲取所有非空行(觀察/^$/d命令),並在每行前面添加一個插入符號^ (以便獲取grep的正則表達式的錨點),並吐出所有這些都是stdout 然后grep,使用-f選項(這意味着從文件獲取所有模式,這恰好是stdin ,這要歸功於-符號)並在文件A上進行反轉匹配(感謝-v選項)。 完成。

我認為應該這樣做:

sed 's/^/\^/g' B > C.tmp
grep -vEf C.tmp A
rm C.tmp

您可以嘗試使用xargscatgrep

將每行的第一個字母保存到FIRSTLETTERLIST中。 你可以用一些catsed工作來做到這一點。

我們的想法是采用黑名單,然后將其與有趣的文件進行匹配。

cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]

這是未經測試的,因此我不保證它會起作用,但它應該指向正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM