2

文字列「pos:665181533pts:11360 t:11.360000crop = 720:568:0:4morewords」が与えられます

bashとgrepを使用して、「crop =」と次のスペースの間の文字列を抽出することはできますか?

では、「crop =」と一致した場合、その後、次の空白の前に何かを抽出するにはどうすればよいですか?

基本的には「720:568:0:4」を印刷する必要があります。

4

4 に答える 4

5

私はそれをこのようにします:

grep -o -E 'crop=[^ ]+' | sed 's/crop=//'

これはsed標準コマンドでもあるを使用します。もちろん、それを別の一連のgrepsに置き換えることもできますが、それは本当に必要な場合に限られます。

于 2013-01-31T04:53:41.633 に答える
3

私は次のように使用sedします:

echo "pos:665181533 pts:11360 t:11.360000 crop=720:568:0:4 some more words" | sed 's/.*crop=\([0-9.:]*\)\(.*\)/\1/'

説明:

s/          : substitute
.*crop=     : everything up to and including "crop="
\([0-9.:]\) : match only numbers and '.' and ':' - I call this the backslash-bracketed expression
\(.*\)      : match 'everything else' (probably not needed)
/\1/        : and replace with the first backslash-bracketed expression you found
于 2013-01-31T04:57:10.513 に答える
1

私はこれがうまくいくと思います(私の参照を再確認する必要があります):

awk '/crop=([0-9:]*?)/\1/'
于 2013-01-31T04:53:52.210 に答える
0

bashパターン置換を使用したさらに別の方法

PAT="pos:665181533 pts:11360 t:11.360000 crop=720:568:0:4 some more words"
RES=${PAT#*crop=}
echo ${RES%% *}
  • crop=最初に、左から右に見つかったものを含むすべてを削除します(#)
  • 次に、右から左に見つかった最初のスペースを含むすべてを削除します(%%)
于 2021-03-24T09:50:30.560 に答える