如何在bash历史扩展中匹配行尾
Bash为历史扩展提供了良好的支持,例如:如何在bash历史扩展中匹配行尾,bash,Bash,Bash为历史扩展提供了良好的支持,例如: echo onetwoone echo !$ => onetwoone 此外,我们还可以根据manbash使用替换: echo onetwoone echo !$:s/one/three/ => threetwoone 首先,我假设这是与sed类似的语法,但事实并非如此。我找不到匹配字符串后端的方法 echo onetwoone | sed 's/one$/three/' => onetwothree 我想对bash的历史扩展做
echo onetwoone
echo !$
=> onetwoone
此外,我们还可以根据manbash
使用替换:
echo onetwoone
echo !$:s/one/three/
=> threetwoone
首先,我假设这是与sed
类似的语法,但事实并非如此。我找不到匹配字符串后端的方法
echo onetwoone | sed 's/one$/three/'
=> onetwothree
我想对bash的历史扩展做同样的事情:
echo onetwoone
echo !$:s/one$/three/
=> -bash: :s/one$/three/: substitution failed
有没有办法做到这一点?谢谢 我不这么认为。引用手册() s/旧/新/ 将事件行中第一次出现的旧项替换为新项。任何分隔符都可以用来代替“/”。分隔符可以用旧的和新的格式引用,并带有一个反斜杠。如果“&”出现在“新”中,它将被“旧”替换。一个反斜杠将引用“&”。如果最后一个分隔符是输入行上的最后一个字符,则它是可选的 它没有说什么关于旧的是一个正则表达式或任何形式的模式 你可以做额外的工作:用“三”替换“一”,重复替换,然后用“一”替换第一个“三” 修饰符似乎不理解正则表达式 解决方法可能是使用
sed
:
$ echo onetwoone
onetwoone
$ sed 's/one$/three/' <<< $(echo !$)
sed 's/one$/three/' <<< $(echo onetwoone)
onetwothree
使用sed
:
$ echo onetwoone
onetwoone
$ sed 's/one$/three/' <<< $(echo !$)
sed 's/one$/three/' <<< $(echo onetwoone)
onetwothree
谢谢你的回复。实际上,如果将此变通方法应用于诸如“mv”、“cp”之类的命令,则不适用
fc
将是一个很好的选择,但它不能应用于“当前命令”以替换诸如“!#:1:s/old/new”之类的引用。无论如何,谢谢你。