7

使用grep,您可以使用问号?来表示可选字符,即要匹配 0 次或 1 次的字符。

$ foo=qwerasdf

$ grep -Eo fx? <<< $foo
f

问题是 Bash 字符串操作是否有类似的功能?就像是

$ echo ${foo%fx?}
4

1 回答 1

9

您可能在谈论参数扩展。它使用 shell 模式,而不是正则表达式,所以答案是否定的

进一步阅读后,我注意到如果你

shopt -s extglob

您可以使用扩展模式匹配,它可以实现类似于正则表达式的功能,尽管语法略有不同。

看一下这个:

word="mre"
# this returns true
if [[ $word == m?(o)re ]]; then echo true; else echo false; fi

word="more"
# this also returns true
if [[ $word == m?(o)re ]]; then echo true; else echo false; fi

word="mooooooooooore"
# again, true
if [[ $word == m+(o)re ]]; then echo true; else echo false; fi

也适用于参数扩展,

word="noooooooooooo"
# outputs 'nay'
echo ${word/+(o)/ay}
# outputs 'nayooooooooooo'
echo ${word/o/ay}
于 2012-10-19T09:42:29.967 回答