在bash脚本中,有什么方法可以做到以下几点?
var="fooo_barrrr"
除了'_'之前删除所有字符以便var变成“barrrr”的最佳方法是什么?
答案 0 :(得分:5)
$ var="fooo_barrrr"
$ echo ${var#*_}
barrrr
要更改var本身,var=${var#*_}
。
请注意,这会删除第一个_
:
$ var="fooo_barrr_r"
$ echo ${var#*_}
barrr_r
如果您想删除最后一个,则需要使用##
代替:
$ var="fooo_barrr_r"
$ echo ${var##*_}
r
参见一些替代方案:
使用sed
:
$ sed 's/^[^_]*_//' <<< "foo_barrrr_r"
barrrr_r
使用awk
:
$ awk 'gsub(/^[^_]*_/,"")1' <<< "foo_barrrr_r"
barrrr_r
使用grep
:
$ grep -oP '[^_]*_\K.*' <<< "foo_barrrr_r"
barrrr_r
在所有情况下,要将新值存储在同一个var中,请执行var=$(command <<< "$var")
。
答案 1 :(得分:1)
或者,使用grep
:
echo fooo_barrrr | grep -oP '.*(?=_)'
要了解每个标志的含义,请使用grep --help
:
-P
, - pel-regexp
PATTERN是一个Perl正则表达式
-o
, - 仅匹配
仅显示与PATTERN匹配的部分
为了避免在有两个以上的部分时出现错误结果,您可以使用:
echo fooo_barrrr_xyz | grep -oP '.*?(?=_)' | head -1