使用grep

时间:2019-04-03 14:05:57

标签: bash shell grep

我正在尝试使用带有正则表达式的grep提取字符串的一部分。我已经使用regexr测试了正则表达式,并且可以正常工作。我在macOS上。

这是我的代码:

echo -e '"HI":"Hola!"' | grep -o '(?=[^\"]).+?(?=":")'

如果我尝试使用-P选项,它将显示grep的用法说明:

usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [--null] [pattern] [file ...]

我想获得HI作为输出。我需要传送grep输出还是缺少其他内容?

谢谢

2 个答案:

答案 0 :(得分:1)

使用GNU-grep:

using namespace std

或带有

$ echo '"HI:"Hola!""' | grep -oP '\w+(?=:)'
HI

look around explained

答案 1 :(得分:0)

如果您没有grep的Perl兼容版本,请尝试sed-

$: echo -e '"HI:"Hola!""' | sed -En '/".*?:"/ { s/.*"(.*?):".*/\1/; p; }'
HI

这抓取了":"之间的所有事物的第一次出现。如果不正确,请说明您的参数。

此外,您可以只使用perl。 :)