次のような文字列を含むファイルがあります:
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
grep
単語を検索するために使用したいと思います。次のコマンドを使用しました:
grep -w "Level1.2" file1.txt > result.txt
出力は次のようになります。
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
Level1.2,Levelv2
しかし、最初の列を無視するには grep が必要です。出力には次のものが必要です。
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
できるだけ、自分のコマンドで助けてください。新しいコマンドや検索方法は好みません。2 列目から検索を開始するだけで十分です。
答え1
これは、私の答え関連する質問へ:
grep '^[^,]*,.*Level1\.2' myfile.txt
あるいはもっと簡単に言えば:
grep ',Level1\.2' myfile.txt
一致文字列の先頭のコンマにより、最初のフィールドの何も一致しないことが保証されます。
Level1.20
またはの可能性がありLevel1.2a
、これらのケースを除外したい場合は、単語区切り文字を追加する必要があります。
grep ',Level1\.2\b' myfile.txt
これらのいずれの場合もegrep
(またはgrep -E
) は必要ないことに注意してください。
答え2
-P
肯定後読みオプション (PCRE) を使用します。
grep -Pw "(?<=,)Level1\.2" file.txt
出力:
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