2011-11-14 23 views
-3

Linuxで文字列を解析するのに助けが必要です。grepで文字列を解析する

私は、文字列があります。

[INFO] Total time: 2 minutes 8 seconds 

をし、ラインプレフィックスは単にsedを使用して、空の文字列とプレフィックスを置き換える、常に同じである場合のみ

2 minutes 8 seconds 
+1

あなたは実際に 'man sed'を読んでいますか? – thiton

+0

grepを試してみましたが間違っています –

+1

grepがこの仕事の正しいツールだと思いますか?これは「ハンマーしか持っていない、すべてが爪のように見えます」というケースですか? –

答えて

2

を取得したい:

sed 's/\[INFO\] Total Time: //' 

時間が常にコロンの後の行の最後のものであるとすると、次の正規表現を使用します(コロンの後にすべてとそれぞれの行を置き換え):

sed 's/^.*: \(.*\)$/\1/' 
0

使用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*//;" 
7

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)

2

を実装:

$ 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をお読みください。

0

あなたがAWKを好むなら、それはあなたが端末から情報を取得している場合は、あなたが欲しい情報の前にすべてのものを削除するには、区切り文字での情報や使用カットをgrepすることができます

echo "[INFO] Total time: 2 minutes 8 seconds" | awk -F": " '{ print $2 }' 
0

非常に簡単です。 grep INFO | cut -f2 -d:

ファイルから情報を取り出したい場合は、ファイルをgrepできます。 grep INFO somefilename | cut -f2 -d: