Bash 中所有匹配的^单词^替换^?
为了澄清这一点,我正在寻找一种方法来执行全局搜索并替换以前使用的命令。 ^word^replacement^
似乎仅替换第一个匹配项。
是否有一些 set
选项让我困惑?
To clarify, I am looking for a way to perform a global search and replace on the previous command used. ^word^replacement^
only seems to replace the first match.
Is there some set
option that is eluding me?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
解决这个问题的一种糟糕的方法可能是这样的:
想要通过将 L 替换为 A 来回显
BAABAA
而不是BLABLA
不幸的是,这种技术似乎不适用于函数或别名。
A nasty way to get around this could be something like this:
Want to echo
BAABAA
rather thanBLABLA
by swapping L's for A'sUnfortunately this technique doesn't seem to work in functions or aliases.
我在SUSE 10.1上测试过。
“^word^replacement^”不起作用,而“^word^replacement”效果很好。
举个例子:
I test it on SUSE 10.1.
"^word^replacement^" doesn't work, while "^word^replacement" works well.
for a instance:
尝试这个:
Try this:
此解决方案使用 Bash 子字符串替换:
请注意,使用双斜杠表示“全局”字符串替换。
该解决方案可以在一行中执行。
以下是如何全局替换名为“myfile.txt”的文件中的字符串:
This solution uses Bash Substring Replacement:
Note the use of the double slashes denotes "global" string replacement.
This solution can be executed in one line.
Here's how to globally replace a string in a file named "myfile.txt":
混合我的答案 这里与约翰·费米内拉的你可以这样做,如果你想要一个别名:
The !! 只执行前一个命令, while !?string? 匹配包含“string”的最新命令。
Blending my answer here with John Feminella's you can do this if you want an alias:
The !! only does the previous command, while !?string? matches the most recent command containing "string".
这个问题有很多重复,一个优雅的答案只出现在unix SE
中用户@Mikel的这个答案中fc -s pat=rep
这个 bash 内置函数记录在 9.2 Bash 历史内置函数
this question has many dupes and one elegant answer only appears in this answer of user @Mikel in unix se
fc -s pat=rep
this bash builtin is documented under the chapter 9.2 Bash History Builtins