假设我有一个变量foo
,即:
foo=`echo ab cd ef gh`
如果你echo foo
,你会得到:
$ echo $foo
ab cd ef gh
现在,我想ef
从$foo
.最快的方法是什么?
答案1
假设您的变量至少包含一次ef
, POSIXly:
$ printf '%s\n' "${foo%ef*}${foo##*ef}"
ab cd gh
在bash
、ksh
变体(不包括posh
)zsh
和中yash
,您可以使用:
$ printf '%s\n' "${foo/ef}"
删除第一次出现的ef
,或"${foo//ef}"
删除所有出现的 。
答案2
您可以使用外壳的模式替换删除图案:
$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd gh
笔记
许多人认为使用反引号已经过时了。命令替换的常见现代形式是
$(...)
.使用反引号和 echo 来创建
foo
是多余的。您可以简单地将字符串分配给变量,如上所示。为了让您知道发生了什么,当您使用 echo 而不使用将其参数放在引号中时,shell 会执行分词,将字符串分成三部分,将其
echo
作为三个单独的参数提供。echo
用空格连接其参数。
答案3
这是两种方法...
uc@SVE1411EGXB:~/shop_app/depot2$ foo=`echo ab cd ef gh`
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef}
ab cd gh
或者使用流编辑器 AKA sed
.. 搜索"ef"
并替换为空。
uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
ab cd gh