以下に示すように、多くの行を含むファイルがあります。
123)hfd)jggg)7584)abc
123)))7584)abc
)hfd)jggg)7584)cdf)))abc
)hfd)))abc
)
[右角かっこ]が4番目に表示された場合は、abcで行を出力する必要があります。したがって、出力は次のようになります。
123)hfd)jggg)7584)abc
123)))7584)abc
)hfd)))abc
答え1
grep
十分:
grep -E '^([^)]*\)){4}abc'
このコマンドは、「)」以外の文字シーケンスで始まり、その後に「)」が4回繰り返され、その後に「abc」が続く行を探します。
答え2
ではawk
、任意のフィールド区切り文字を設定できます。この場合、)
フィールド区切り文字として使用するにはを使用します-F')'
。最初のフィールドは最初の区切り文字の前にあるフィールドであり、2番目のフィールドは最初と2番目の区切り文字の間にあるフィールドです。"abc"
5番目のフィールド()$5
の文字列を照会しようとしています。
awk -F')' '$5 == "abc"' file
awk
1行ずつ作業することは、条件が満たされたらコマンドを実行するのと同じです。条件がない場合は各行でコマンドが実行され、コマンドが存在しない場合は条件が満たされると行全体が印刷されます。'CONDITION { COMMAND }'
答え3
とともにGNU sed編集する。その文字が4番目に現れる場所にマーカーを配置し、)
次のステップでそれらを削除してみてください。成功後に印刷します。
sed -ne '
s/)/\n/4
s/\nabc/)abc/p
' file