2

给定一个字符串“pos:665181533 pts:11360 t:11.360000 crop=720:568:0:4 some more words”

是否可以使用 bash 和 grep 在“crop=”和以下空格之间提取字符串?

因此,如果我匹配“crop=”,我如何在它之后和以下空白之前提取任何内容?

基本上,我需要打印“720:568:0:4”。

4

4 回答 4

5

我会这样做:

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

它使用sedwhich 也是一个标准命令。当然,您可以将其替换为另一个 grep 序列,但前提是确实需要它。

于 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 回答