如何在命令行上替换上一个命令中的字符串?

如何在命令行上替换上一个命令中的字符串?

我需要运行一个命令,然后再次运行相同的命令,仅更改一个字符串。

例如,我运行命令

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

现在,从那里开始,无需返回命令历史记录(通过向上箭头),我需要替换code1mycode或其他字符串。

可以在 Bash 中完成吗?

答案1

我重命名了你的脚本,但这里有一个选项:

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

执行脚本后,使用:

$ ^code1^code2

...这导致:

./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code2 -t query

man bash并搜索“事件指示符”:

^字符串1^字符串2^

快速替换。重复最后一个命令,将 string1 替换为 string2。相当于 !!:s/string1/string2/

编辑以添加全局替换,这是我刚刚从 @slm 的回答中了解到的https://unix.stackexchange.com/a/116626/117549:

$ !!:gs/string1/string2

其中说:

!! - recall the last command
g - perform the substitution over the whole line
s/string1/string2 - replace string1 with string2

答案2

bash 内置命令fc可用于在历史记录中查找命令并可选择编辑/运行它。使用 bash 内置命令help fc获取更多文档。

fc -s code1=code2

会查找上一条命令中所有出现的code1并将其更改为code2,然后执行新命令。

当需要更改多个特殊字符时,它会很有用。假设之前的命令是;

$ java a/b/c/d

# Then,

fc -s /=.

# will produce
$ java a.b.c.d

相关内容