这是我的Bash代码:
echo "Some string/Another string" | grep -o "\/.*"
返回/Another string
。
但我不希望/
包含在echo
返回的值中。
如何更改正则表达式呢?
编辑:我希望在/
后匹配所有内容,无论后面是什么。 "Another string"
并不总是在/
之后。
答案 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