Shell 脚本从文本中抽取内容

Last Modified: 2023/01/15

匹配方法

# \K表示匹配从\K标记的位置开始算起
# (?=\\")这个表示括号内部的内容非捕获,非捕获组需要以?=开始
# 反斜杠需要转义,所以这里使用两个连续的反斜杠
grep -oP 'some text as match prefix\K.+?(?=\\")' /path/to/text-file

\K 开始到 (?=\\") 结束,这之间的内容就是我们要抽取的内容。\K 之前的内容只是为了定位匹配开始的位置。

举个例子

运行下面的命令,创建一个待匹配的文本,我们的目标是匹配所有的 pro: 后面的数值:

echo 'pro:1, some xyz, pro:2, some text, pro:3, some text' > /tmp/product.txt

所需的命令如下:

grep -oP 'pro:\K.+?(?=,)' /tmp/product.txt

由于我们不需要匹配逗号,因此将逗号作为结束符写在非捕获组中。我们要匹配的内容的前缀是 pro:,因此将 pro: 写在 \K 前面。匹配的结果如下:

1
2
3

-o 表示只打印匹配的部分,且每个匹配的部分都单独输出一行:

-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

有问题吗?点此反馈!

温馨提示:反馈需要登录