
可能なすべての値を見つけるためにgrepを指定する方法
つまり、次のファイルを使用してください(9701
どんな値でも可能です)。
9701=1??
9701=10.Pp
9701=1a 8a
9701=3.a_tt
9701=1/a -00
9701=Bg1998pps
私が試すことができます
egrep -Eo '9701=[A-Z]+[a-z]+[0-9]{1,50}' test.log
これは大文字/小文字と数値のみを提供します。 grepリクエストに特殊文字を含む値を含める方法は?つまり、スペース、ドット、ハイフン、アンダースコアなどを使用します。
答え1
cut -d '=' -f 2- data.in
これにより、各行が複数の別々のフィールドとして処理され、=
最初のフィールド以降のすべての項目が返されます。
出力:
1??
10.Pp
1a 8a
3.a_tt
1/a -00
Bg1998pps
行の最初の部分に関連するコンテンツのみを返す必要がある場合(9701
あなたの場合):
grep '^9701=' data.in | cut -d '=' -f 2-
または全体の内容は次のとおりですawk
。
awk -F '=' '$1 == "9701" { sub(/^[^=]+=/,""); print }' data.in
これは、最初の区切り文字フィールドの文字列比較を実行し=
て関心のあるレコードを見つけ、最初のフィールドと=
区切り文字を削除して残りの内容を出力します。
答え2
他のすべての文字を含めるには、grep
次のコマンドを使用できます。
grep -Eo '9701=.{1,50}' test.log
ドットはすべての文字を表します。
ただし、これは各行の「9701 =」部分を切り捨てません。これを達成するには、次のものを使用できます。cut
cut -d "=" -f 2- test.log
値=
も含めると問題が発生する可能性があります。
sed
この問題を解決し、最終的に問題に対するより良い解決策を提供します。
sed -r 's/^9701=(.*)$/\1/' test.log
または
sed 's/^9701=\(.*\)$/\1/' test.log
でも
sed 's/^9701=//' test.log
答え3
そしてpcregrep
:
pcregrep -o1 '9701=(.*)'
9701=
行の左端の項目の右側を印刷します(9701 =を含む行の場合)。
十分に新しいPCREで構築されたGNUの使用grep
:
grep -Po '9701=\K.*'
9701=
入力などの空行(つまり、9701=
後に空の文字列が続く場合)は報告されません。
標準的にこれは仕事になりますsed
:
sed -n 's/9701=/\
/;s/.*\n//p'
答え4
grep
Perl-regex
モードからlookbehind
:
grep -oP '=\K.+'