1

私のテキストファイルには、このような行がいくつかあります...

some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s) Current status: DONE 
some data there Waiting on job_xyz ... (240s) Current status: DONE 

ジョブIDを見つける必要があります。上記の例では...

bba6b2a1589b4535a804e7877dc1fe11
xyz

grep を使用できますが、ID のみを選択するにはどうすればよいですか?

猫ファイル.log | grep 'ジョブ待ち_'

4

3 に答える 3

2

これが必要な場合は?

kent$  echo "some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s)"|grep -oP "(?<=Waiting on job_)[^ ]*" 
bba6b2a1589b4535a804e7877dc1fe11
于 2012-06-11T12:36:04.950 に答える
1
sed 's/.*Waiting on job_\([^ ]*\).*/\1/'

Waiting on job_0 個以上の非スペース文字が続く行ごとに、これは行全体を置き換えます (開始と終了.*は可能な限り多くの文字を貪欲に取るため)と の間で\1一致したすべてを呼び出すために後方参照を使用します。つまり、探している非スペース文字。\(\)[^ ]*

そう:

cat file.log | grep 'Waiting on job_' | sed 's/.*Waiting on job_\([^ ]*\).*/\1/'

またはより簡単:

grep 'Waiting on job_' file.log | sed 's/.*Waiting on job_\([^ ]*\).*/\1/'
于 2012-06-11T13:32:02.710 に答える
0
perl -lne 'print $1 if m/(?<=Waiting on job_)([^ ]*)/' inputfile
于 2012-06-11T16:53:30.313 に答える