man bash
描述了一个非常有用的Event Designator
^字符串1 ^字符串2 ^
快速替换。重复上一个命令,将string1替换为string2。相当于''!!:s / string1 / string2 /''
在命令行输入!!:gs/string1/string2/
以替换上一个命令中的所有匹配项时,是否有办法执行@string1@string2@
? (@
或任何其他指定的字符/字符串)
答案 0 :(得分:2)
事实上,可能存在一种方法,使用`trap'...“debug'...
类似的东西:
trap 'if [[ $BASH_COMMAND =~ ^@(.*)@(.*)@$ ]] ;then
BASH_LAST=${BASH_LAST//${BASH_REMATCH[1]}/${BASH_REMATCH[2]}};
$BASH_LAST;
unset BASH_COMMAND;
else BASH_LAST=$BASH_COMMAND;
fi;
' debug
这很快而且很脏,但是会出现执行错误,但我认为:这可能是一种方法。
编辑01
这好一点,但历史仍然存在错误:
shopt -s extdebug
trap '
if [[ $BASH_COMMAND =~ ^@(.*)@(.*)@$ ]] ;then
BASH_LAST="${BASH_LAST//${BASH_REMATCH[1]}/${BASH_REMATCH[2]}}"
$BASH_LAST
false
else
BASH_LAST="$BASH_COMMAND"
fi' debug
但警告: 我为 fun 执行此操作,使用bash并了解其工作原理...这不适用于有效的最终解决方案!!
答案 1 :(得分:2)
^string1^string2^:g&