Shell 脚本从文本中抽取内容
匹配方法
# \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.
有问题吗?点此反馈!
温馨提示:反馈需要登录