重复 bash 历史扩展替换所有匹配项

重复 bash 历史扩展替换所有匹配项

:&重复 bash 历史扩展替换。例如:

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9
echo 9 1 1 1 1
9 1 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&
echo 9 9 1 1 1
9 9 1 1 1
$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:&:&:&:&
echo 9 9 9 9 9
9 9 9 9 9
$ 

:&如上所示,每次重复都需要键入。有没有办法自动重复替换所有匹配项?我的意思是:

$ echo 1 1 1 1 1
1 1 1 1 1
$ ^1^9^:*
echo 9 9 9 9 9
9 9 9 9 9
$ 

答案1

您可以使用事件指示符反而:

$ echo 1 1 1 1 1
1 1 1 1 1
$ !!:gs/1/9/
echo 9 9 9 9 9
9 9 9 9 9

!!是一个词指示符它扩展到上一个命令运行。s并且g修饰语:

在可选字指示符之后,您可以添加一系列一个或多个以下修饰符,每个修饰符前面都有一个“:”。

旧/新/

用新的替换事件线中第一次出现的旧的。 [...]

克/年

导致更改应用于整个事件线。与 's' 结合使用,如gs/old/new/,或与 '&' 结合使用。

因此,!!:gs/1/9/意思是“运行上一个命令,将所有 1 替换为 9”。

相关内容