如何從第二列開始搜尋字串

如何從第二列開始搜尋字串

我有一個包含逗號分隔字串的檔案。字串可能包含點(即不僅僅是字母數字字元)。這是一個例子:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

我需要搜尋網站名稱(請注意,我沒有網站名稱的特定格式,即它並不總是以 .com 結尾,所以我不應該考慮第一列的樣子)

我需要那些網站僅有的包含特定的字串。在這個例子中,Level1.2 (沒有 Level1.1 也沒有 Level1.0 沒有 Level3之前或之後)。然後將結果列印到符合條件的新文件中(僅包含Level1.2)。因此,搜尋關鍵字從第二列開始(我不希望搜尋結果在網站名稱中找到匹配模式)。

因此,如果我正在搜尋 Level1.2,新檔案應包含:

site1.com,Level1.2
site3.com,Level1.2

但我的命令結果是:

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

如果有一個網站的名稱包含 Level1.2,則不應將其計算在內,因為我不關心第一列。

我嘗試了這個命令,它對我有用。唯一的問題是我需要搜尋來忽略第一列中搜尋字串的出現。

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

答案1

你可以試試這個awk

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

輸入分隔符號設定為,。此命令列印包含 2 個欄位的行,其中第二個欄位具有相符的字串。

答案2

以下作品:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

這會跳過第一個欄位及其尾隨逗號,然後尋找與Level1.2;的匹配項。然後透過忽略所有帶有後續欄位的記錄LevelLevel第一個欄位中的任何記錄都不會有前面的逗號)來過濾結果。

我假設其他文字可以附加到Level1.2,前提是它不包含Level字串。如果這不是真的,那麼您可以使用更簡單的方法:

grep '^[^,]*,Level1\.2$' myfile.txt

相關內容