我想用perl搜索csv文件中的文本。但我需要確切的匹配,讓我看看我是否在搜索單詞U我不想讓腳本在結果中顯示美國。我曾嘗試在開始和結束時使用「」&/b,如果我將CSV值存儲到數組,但是如果我想直接在CSv中搜索,則不起作用。 我的$ CURR = U 如果(grep的$ CURR, 「test.csv」) 打印 「完成」在perl中使用grep的excel中的準確單詞匹配
這是我展示美國作爲輸出
我想用perl搜索csv文件中的文本。但我需要確切的匹配,讓我看看我是否在搜索單詞U我不想讓腳本在結果中顯示美國。我曾嘗試在開始和結束時使用「」&/b,如果我將CSV值存儲到數組,但是如果我想直接在CSv中搜索,則不起作用。 我的$ CURR = U 如果(grep的$ CURR, 「test.csv」) 打印 「完成」在perl中使用grep的excel中的準確單詞匹配
這是我展示美國作爲輸出
首先,請允許我糾正你的誤解。這:
grep "U", "test.csv"
...不grep
的字符串U
文件test.csv
,它裏grep串test.csv
的物品清單,其中"U"
計算結果爲真(這是所有的人,"U"
始終是真實的)。在Perl,grep
被應用到的參數列表,像這樣:
grep /foo/, @list;
不過,你不需要grep
這一點。使用它將意味着將整個文件讀入內存以創建grep
的參數列表,並且一般而言,這樣做沒有任何好處,而且大多隻是增加了成本。
我假設你在這裏找的是一個簡單的方法來檢查一個csv文件中的確切字符串。一個簡單的辦法做到這一點是使用負環視斷言:
my $del = ","; # your csv delimiter
my $search = "U"; # the text you search for
while (<>) {
print if /(?<![^$del])$search(?![^$del])/;
}
的(?<![^$del])
稱,您的字符串之前的字符是不是非分隔符,同樣(?![^$del])
斷言字符是後不是不分隔符。雙重否定可能看起來很複雜,但是其好處是它們也匹配搜索字符串不被任何一側的分隔符包圍的條件,即csv行的開始或結束。
此處的菱形運算符將打開作爲參數給出的文件,並通過它們的內容讀取while循環的每個迭代。例如:
perl mygrep.pl test.csv
這不是一個完整的解決方案,但它應該讓你知道如何獲得你要去的地方。
perl -lne 'print if(/\bU\b/)'' your_csv_file
以下測試:
> cat temp
info info US info cat
info info U info cow
info info info dog
info info U info dinosaur
info info info bat
phoenix.209> perl -lne 'print if(/\bU\b/)' temp
info info U info cow
info info U info dinosaur
,或者您也可以使用grep命令行下面
> grep -w U temp
info info U info cow
info info U info dinosaur
我不知道關於它的CSV一面,但是你試過使用正則表達式? perl有一些很好的正則表達式函數用於搜索,比如'/^U $ /'。 – dgBP
請修改您的帖子以顯示整個代碼,包括分號等。 – Perleone
分號等無問題 – Richa