Mic*_*udl 0 grep string regular-expression
假设一个文本字符串my_string
$ my_string="foo bar=1ab baz=222;"
Run Code Online (Sandbox Code Playgroud)
我想提取关键字baz
和分号之间的字母数字字符串。
如何使用正则表达式断言修改以下 grep 代码以排除尾随分号?
$ echo $my_string | grep -oP '(?<='baz=').*'
222;
Run Code Online (Sandbox Code Playgroud)
除非您要提取的字符串本身可能包含;
,否则最简单的事情可能是将.
(匹配任何单个字符)替换为[^;]
(匹配除 之外的任何字符;
)
$ printf '%s\n' "$my_string" | grep -oP '(?<='baz=')[^;]*'
222
Run Code Online (Sandbox Code Playgroud)
通过grep
链接到 libpcre 7.2 或更高版本,您还可以使用以下形式简化lookbehind \K
:
$ printf '%s\n' "$my_string" | grep -oP 'baz=\K[^;]*'
222
Run Code Online (Sandbox Code Playgroud)
这些将打印字符串中的所有匹配项,并假设匹配文本不包含换行符(因为grep
单独处理每行输入)。