我正在编写一个函数,zsh
其中有一个字符串
"find . -a -print:10"
该:10
部分需要从右侧修剪掉。这可能会在未来发生变化,成为:23
等等:77
,所以似乎:[0-9]+
需要这样的模式。
此外,该字符串可能具有以下形式
find . -a -print
:[0-9]+
在这种情况下,如果末尾没有模式,则字符串应保持不变。
所以
find . -a -print:10
应该成为find . -a -print
和find . -a -print
应该保持为find . -a -print
到目前为止我已经尝试过的
% sed -nr 's/(.*)(:[0-9]+)?/\1/p' <<<'find . -a -print:10'
find . -a -print:10 # ':10' not getting trimmed
如果我尝试
sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print:10'
find . -a -print # ':10' getting trimmed GOOD ✔✔
但同样的sed
表达
sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
# no output
我怎样才能正确修剪这个字符串?
答案1
-n
如果您不想抑制默认输出,为什么要使用它?
只需使用:
sed -E -e 's/:[0-9]+$//'