单个命令行中的两个耦合替换?

单个命令行中的两个耦合替换?

这很好用:

ls /path/{foo,bar}/

现在,如果我想有效地做到这一点该怎么办:

cp /path/foo/bunch/of/stuff/foo.txt /path/bar/bunch/of/stuff/bar.txt

我可以在单个命令行上做一些速记吗?

即有点像cp /path/{foo,bar}/file.txt,但是哪里有两个替换必须同时完成?

实际上,我想要多个耦合的支撑扩展,但不会产生所有可能的组合。

答案1

替换可以包括/

cp /path/{foo/foo,bar/bar}.txt

相当于

cp /path/foo/foo.txt /path/bar/bar.txt

另一种方法是搜索和替换;只要“foo”不包含斜杠,这就有效:

set /path/foo/bunch/of/stuff/foo.txt; cp $1 ${1//foo/bar}

答案2

一种方法是使用历史互动,但对于当前行 ( !#):

$ echo /path/foo/bunch/of/stuff/foo.txt  !#:1:gs/foo/bar/
echo /path/foo/bunch/of/stuff/foo.txt  /path/bar/bunch/of/stuff/bar.txt
  • !#正如已经说过的,指的是当前行
  • :1到第一个词
  • :s/foo/bar替代barfoo
  • g是一个修饰符,可以对整行进行替换

相关内容