2011-07-28 3 views
0

ファイル内のキーワード "mykey ="を検索し、そのキーワードに続く文字列を出力したいとします。 各行が非常に長いため、 "grep"を実行できません。私はちょうどキーワードの後の文字列を抽出したい。このように、キーワードを仮定ファイル内のキーワードを検索し、そのキーワードに続く文字列を出力するにはどうすればよいですか?

+1

この文字列はどのように区切られていますか? '= 'から行末まで? –

答えて

1

ここに私が思い付いたものです。最初ではなく、動作し、最終的なgrepはありません。あなたが手元にpcregrepを持っている場合は、正規表現のみ-o戻り肯定後読みを、使用していますmykey =

$ pcregrep -o '(?<=mykey =).+' file 

grep 'mykey = ' file | sed 's/.*\(mykey = [A-Za-z]*\).*/\1/' 
+1

grep:sed '/ mykey =/s/...'も必要ありません。 –

+0

@glennjackman私はあなたをフォローしていません。 '...'とは何ですか?私の解決策から 'grep'を単に削除すれば、不一致の行はすべて変更されず、一致する行は適切に短縮されます。あなたが明示的にあなたのソリューションを書くなら、私は何かを学ぶと確信しています、そして私はそれをupvoteします。 –

+1

sedでは、 "s"コマンドはすべての行で動作する必要はありません。 "s"を使う行を指定することができます。たとえば、 'seq 1 9 | sed '/ [2468]/s /./&&/' ' - "s"コマンドは偶数の場合のみ起動します。この場合、私はあなたのパイプラインから "grep"を削除することは完全ではありませんでした。 'sed -n '/ mykey =/{s /.* \(mykey = [A-Za-z] * \)。 */\ 1 /; p} '' - これは"/mykey =/"と一致しない行を無視します –

1

は一つの単語で、スペースは、それに従います。 にmykey = myCoolValue

grep 'mykey' /your/file/here | sed -r 's/.*mykey = (^[ ]*) .*/\1/g' | grep .

+0

"sed -r"は何をしますか?私のsedはsed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...] のみをサポートしています。 – Vicky

+0

でも、もし私がsed-sの/.* mykey =(^ [] *)。*/\ 1/g 'を実行しているとします。それは "sed:1:" s /.* errorCode =(^ [] *)と書かれています。 ... ":\ 1はREに定義されていません" – Vicky

+0

ああ、あなたはLinuxにいると思った。 -rの代わりに-Eを使用すると拡張正規表現が有効になりますが、Macでは必要ないかもしれませんが、確かではありません。 sed -sは必要ありません。 – opsguy

0

して、あなただけの必要なテキストを取得するには、端末やスクリプトでこのコマンドを発行することができます一致したテキストであり、行全体ではありません。

関連する問題