Grep最后一次出现单引号内的子字符串

时间:2018-08-27 10:39:37

标签: regex linux grep

我正在尝试在单引号的最后一次出现内的字符串中grep一个子字符串。以下是我的String:

'abc''cde''efg'

下面是我使用的命令;

echo "'abc''cde''efg'" |rev|grep -m1 -oP "(?<=') .*?(?=')"

但是我没有得到想要的输出。我正在尝试efg时得到fge。

2 个答案:

答案 0 :(得分:0)

如果反转整个字符串,则提取后还应该反转结果。

但是,为您的情况使用PCRE正则表达式(通过P选项启用)可以简化任务:

grep -oP ".*'\K[^']+"

在这里,.*'匹配到'的最后一个(最右边)出现,\K match reset operator会丢弃整个匹配的文本,而[^']+会放入结果1或'以外的其他字符。

由于并非所有系统都提供grep的PCRE功能,因此您也可以考虑使用awk解决方案:

awk -F\'\' 'gsub(/^'"'"'+|'"'"'+$/, "", $0) {print $NF}'

在这里,该字符串被分成带有''子字符串(-F\'\')的字段,然后删除了前导/结尾'gsub(/^'"'"'+|'"'"'+$/, "", $0)),最后是字段已打印({{1)}。

请参见online demo

答案 1 :(得分:-1)

代码段:

sed -r "s/.*'(\w+)'$/\1/g"
efg

grep -oP ".*'\K[^']+(?=')"
efg