Linuxで文字列を解析するのに助けが必要です。grepで文字列を解析する
私は、文字列があります。
[INFO] Total time: 2 minutes 8 seconds
をし、ラインプレフィックスは単にsedを使用して、空の文字列とプレフィックスを置き換える、常に同じである場合のみ
2 minutes 8 seconds
Linuxで文字列を解析するのに助けが必要です。grepで文字列を解析する
私は、文字列があります。
[INFO] Total time: 2 minutes 8 seconds
をし、ラインプレフィックスは単にsedを使用して、空の文字列とプレフィックスを置き換える、常に同じである場合のみ
2 minutes 8 seconds
を取得したい:
sed 's/\[INFO\] Total Time: //'
時間が常にコロンの後の行の最後のものであるとすると、次の正規表現を使用します(コロンの後にすべてとそれぞれの行を置き換え):
sed 's/^.*: \(.*\)$/\1/'
使用sed
またはperl
:
echo "[INFO] Total time: 2 minutes 8 seconds" | sed -e 's/^\[INFO\] Total time:\s*//'
echo "[INFO] Total time: 2 minutes 8 seconds" | perl -pe "s/^\[INFO\] Total time:\s*//;"
SEDとperlのオプションが作業を行うが、この些細な場合には、私は
を好みますecho "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2
あなたがスペースに対して何かを持っている場合は、あなただけの
を使用することができますたり...
echo "[INFO] Total time: 2 minutes 8 seconds" | cut -d: -f2 | cut -c2-
PS。トリビア:grep
でgrepがこのような正のlookbehindを実装した場合にのみこれを行うことができます。egrep -o '(?<=:).*'
;残念ながらどちらもPOSIX拡張正規表現でもGNUの拡張正規表現はgrep
を使用した後読み(http://www.regular-expressions.info/refflavors.html)
を実装:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | grep -o '[[:digit:]].*$'
2 minutes 8 seconds
またはsed
を:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | sed 's/.*: //'
2 minutes 8 seconds
またはawk
:
$ echo '[INFO] Total time: 2 minutes 8 seconds' | awk -F': ' '{print $2}'
2 minutes 8 seconds
またはcut
:その後、
$ echo '[INFO] Total time: 2 minutes 8 seconds' | cut -d: -f2
2 minutes 8 seconds
そしてsed & awk, Second Editionをお読みください。
あなたがAWKを好むなら、それはあなたが端末から情報を取得している場合は、あなたが欲しい情報の前にすべてのものを削除するには、区切り文字での情報や使用カットをgrepすることができます
echo "[INFO] Total time: 2 minutes 8 seconds" | awk -F": " '{ print $2 }'
非常に簡単です。 grep INFO | cut -f2 -d:
ファイルから情報を取り出したい場合は、ファイルをgrepできます。 grep INFO somefilename | cut -f2 -d:
あなたは実際に 'man sed'を読んでいますか? – thiton
grepを試してみましたが間違っています –
grepがこの仕事の正しいツールだと思いますか?これは「ハンマーしか持っていない、すべてが爪のように見えます」というケースですか? –