在bash脚本中,请执行以下操作的有效方法是什么?
var="fooo_barrrr"
请删除之前包括'_'的所有字符,以使var变成“barrrr”的最佳方法是什么?
使用参数扩展 :
$ 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")
。
或者,使用grep
:
echo fooo_barrrr | grep -oP '.*(?=_)'
要理解每个标志的含义,请使用grep --help
:
-P
,–perl-regexp
PATTERN是一个Perl正则表达式
-o
, – 唯一匹配
仅显示匹配PATTERN的行的部分
为了避免错误的结果,当有两个以上的部分,你可以使用:
echo fooo_barrrr_xyz | grep -oP '.*?(?=_)' | head -1