Command-Line
管道 sed 到 grep 似乎沒有按預期工作
我有 2 個文件:
$ cat file1 jim.smith john.doe bill.johnson alex.smith $ cat file2 "1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 "1/30/2017 11:14:03 AM",New customer,john.doe,CA,1485771243 "1/30/2017 11:13:53 AM",New customer,bill.smith,CA,1485771233
我想從 file2 中獲取 file1 中不存在的所有名稱。
以下不起作用:
$ cut -d, -f 3 file2 | sed 's/"//g' | grep -v file1 jim.smith tim.jones john.doe bill.smith
為什麼 grep -v 的管道在這種情況下不起作用?
這實際上是我回答您之前的問題的最後一步。
您的解決方案有效,如果您在
-f
前面添加:file1``grep
$ cut -d, -f3 file2 | grep -v -f file1 tim.jones bill.smith
使用
-f
,grep
將查找file1
模式。沒有它,它將簡單地file1
用作文字模式。您可能還想使用
-F
,否則模式中的點將被解釋為“任何字元”。當你在它的時候,把它放在-x
那里以便在整條線上進行匹配(如果你有一個不應該匹配的內容,這grep
將很有用):joe.smith``joe.smiths
$ cut -d, -f3 file2 | grep -v -F -x -f file1
顯然,這要求在行尾沒有尾隨空格
file1
(問題的文本中似乎有)。請注意,
sed
不需要,因為 的輸出cut
不包含任何"
. 此外,如果您需要刪除 all"
,那麼tr -d '"'
將是一個更好的工具。