[英]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
您可以嘗試使用xargs
, cat
和grep
將每行的第一個字母保存到FIRSTLETTERLIST中。 你可以用一些cat
和sed
工作來做到這一點。
我們的想法是采用黑名單,然后將其與有趣的文件進行匹配。
cat file1.txt | xargs grep ^[^[$FIRSTLETTERLIST]]
這是未經測試的,因此我不保證它會起作用,但它應該指向正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.