提取位于匹配模式之后或之间的字符串

时间:2013-01-31 04:35:44

标签: regex

给出一个字符串“pos:665181533 pts:11360 t:11.360000 crop = 720:568:0:4更多的单词”

是否可以使用bash和grep?

在“crop =”和以下空格之间提取字符串

所以,如果我匹配“crop =”,我怎样才能在它之后和下一个空格之前提取任何东西?

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

感谢。

4 个答案:

答案 0 :(得分:4)

我这样做:

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

它使用sed,这也是一个标准命令。当然,你可以用另一个greps序列替换它,但前提是它真的需要它。

答案 1 :(得分:2)

我会使用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

答案 2 :(得分:1)

我认为这样可行(需要重新检查我的参考资料):

awk '/crop=([0-9:]*?)/\1/'

答案 3 :(得分:0)

另一种使用 bash 模式替换的方法

PAT="pos:665181533 pts:11360 t:11.360000 crop=720:568:0:4 some more words"
RES=${PAT#*crop=}
echo ${RES%% *}
  • 首先删除从左到右 (#) 找到的直到并包括 crop= 的所有内容
  • 然后删除所有从右到左找到的第一个空格(包括%%)