在Bash中的一组字符串中最后一个斜杠和下一个空格之间的Regex



我在输出中有一堆字符串

adadds/asdsd/foo aeee/ggdgg/bar aff/ggg/ddafs/afdf/doo

从这里我需要以下列表

foo
bar
doo

我尝试了以下操作,但没有成功:

(?<=/)(.*?)(?=s)

([/])(.*?)(?=s)

使用gnu grep:

s='adadds/asdsd/foo aeee/ggdgg/bar aff/ggg/ddafs/afdf/doo'
grep -oP '[^/s]+(?=s|$)' <<< "$s"
foo
bar
doo

RegEx详细信息:

  • [^/s]+:匹配任何非/且非空白字符的1+
  • (?=s|$):确保在当前位置前面有空白或行尾

如果gnu grep不可用,请尝试此awk:

awk '{for (i=1; i<=NF; ++i) {sub(/.*//, "", $i); print $i}}' <<< "$s"

使用GNU grep,您可以使用

grep -oP '/Kw++(?!/)' <<< "$s"
grep -oP '/Kw++(?!/)' file

查看regex演示

详细信息

  • -o-提取匹配项,而不是与模式匹配的整行
  • P-启用PCRE正则表达式引擎
  • /-/字符
  • K-从匹配中省略匹配的/
  • w++-一个或多个所有格匹配的单词字符
  • (?!/)-右侧不允许立即出现/(匹配失败,如果有/,则不与w++重新匹配(

使用awk:

awk '{for (i=1; i<=NF; i++) {sub(/.*//,"",$i); print $i}}' <<< "$s"
awk '{for (i=1; i<=NF; i++) {sub(/.*//,"",$i); print $i}}' file

也就是说,迭代所有以空格分隔的字段,删除所有直到最后一个/(包括它(的字段,并打印剩余的字段值。

相关内容

最新更新