如何在`/`之后抓住这个字符串的一部分?

时间:2016-04-22 03:49:26

标签: regex bash grep substring

这是我的Bash代码:

echo "Some string/Another string" | grep -o "\/.*"

返回/Another string

但我不希望/包含在echo返回的值中。

如何更改正则表达式呢?

编辑:我希望在/后匹配所有内容,无论后面是什么。 "Another string"并不总是在/之后。

4 个答案:

答案 0 :(得分:2)

使用sed:

$ sed 's/.*\/\(.*\)/\1/' <<< "Some string/Another string"
Another string

搜索任何字符到下一个/,然后捕获并打印下面的字符。

在ERE模式下(GNU sed -r选项)和另一个分隔符可能更具可读性:

sed -r 's|.*/(.*)|\1|'

答案 1 :(得分:2)

如果您有支持PCRE的GNU Grep,那么您可以使用\K来忘记匹配。

$ echo "Some string/Another string" | grep -oP "\/\K.*"
Another string

答案 2 :(得分:2)

使用参数展开

$ string='Some string/Another string'
$ echo "${string#*/}"
Another string

使用#进行扩展会删除扩展参数开头后的内容。

使用 awk

$ awk -F/ '{print $2}' <<< "$string"
Another string

这会将字段分隔符设置为/并打印第二个字段。

答案 3 :(得分:2)

您可以使用剪切命令执行此操作:

如果您希望第一次和第二次出现/

之间的字符串
cut -d '/' -f 2 <<< "Some string/Another string/abc"
output: Another string

如果您想在第一次出现/

后想要整个字符串
cut -d '/' -f 2- <<< "Some string/Another string/abc"
output: Another string/abc