sedを使用して1行の特定の文字列を印刷しようとしています。
最初の問題は、スラッシュを含む文字列を見つけるのが難しいということです。他のスレッドが提供するソリューションのいくつかを試しましたが、成功しませんでした。誰かが私を助けることを願っています。
output.logというファイルがあります。
行の例は次のとおりです。
013-11-08 19:45:52 evtlog.bad PROD/INSE/6004113 2012-11-08 19:04:06 /test11/golf/TierTwo/2013-11/evtlog.log
そのため、sedを使用してこの行に対して次の文字列を印刷したいと思います。
/test11/golf/TierTwo/2013-11/evtlog.log
「golf/TierTwo/2013-11」行で文字列を見つけたいです。
たとえば、次のようにします。
sed 'golf/TierTwo/2013-11' output.log
出力を取得します。
/test11/golf/TierTwo/2013-11/evtlog.log
この目標をどのように達成できますか?
sedの代わりにより良い解決策があれば、それも歓迎されます。私の目標は、スクリプト、bash、またはperlで使用することです。
答え1
awk
sed の代わりに使用:
awk 'index($0,"golf/TierTwo/2013-11")>0 { print $7 }' output.log
これにより、各行の文字列が検索され、インデックスが見つかると7番目の単語が印刷されます。
答え2
または、フラグをgrep
サポートしている場合は、空白ではなく連続文字で囲まれた文字列を見つけることができます。-o
--only-matching
grep -o '[^[:blank:]]*golf/TierTwo/2013-11[^[:blank:]]*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log
または(パールスタイル\S
クラスをサポートしている場合)
grep -Eo '\S*golf/TierTwo/2013-11\S*' output.log
/test11/golf/TierTwo/2013-11/evtlog.log
答え3
perl -naE 'say $F[6] if m!golf/TierTwo/2013-11!' logfile
perl -nae
Perlがawkのように振る舞うようにしてください...