我想要一个下面输入的正则表达式
echo "1280@lic1 1728@lic1 1280@lic2.local 1924@lic1"| grep -Po 'regexp'
我希望输出为不包含1280的单词
1728@lic1 1924@lic1
答案 0 :(得分:1)
您可以使用此前瞻和后瞻性正则表达式:
echo "1280@lic1 1728@lic1 1280@lic2.local 1924@lic1"| grep -Po '(?<=\s|^)(?!\S*1280)\S+'
1728@lic1
1924@lic1
(?<=\s|^)
在我们的比赛之前断言空格或线开始(?!\S*1280)
声称单词1280
如果要从此输出中删除换行符,请将结果传递给tr '\n' ' '
。
答案 1 :(得分:1)
$ echo "1280@lic1 1728@lic1 1280@lic2.local 1924@lic1" | sed 's/1280@[.a-z0-9]*//g'
1728@lic1 1924@lic1
sed
命令将删除您不想要的所有字符串。
您不能直接使用grep
,grep
逐行工作。 -o
的grep
标记将允许您返回每个匹配的单词,但-v
标记(以取消匹配)仅适用于整行。如果您想以这种方式执行,则必须向grep
询问您想要查看的所有匹配项(除非您使用Perl正则表达式“作弊”,这是grep
的GNU扩展名)
或者,您可以分解grep
几行的输出,并以这种方式执行:
$ echo "1280@lic1 1728@lic1 1280@lic2.local 1924@lic1" | tr ' ' '\n' | grep -v '1280'
1728@lic1
1924@lic1
答案 2 :(得分:0)
您可以使用sed
和grep
获取所需的输出。
码
echo "1280@lic1 1728@lic1 1280@lic2.local 1924@lic1"| sed 's/1280@[0-9,a-z,A-Z,.]\+//g' | grep -Po '\d+@[A-Z,a-z,0-9,\.]+'
希望这对你有用。