使用 bash,用其他内容“替换”当前路径的给定部分的最简单方法是什么?如果我当前的路径是这种形式/xxxxx/foo/yyyyy
,如何/xxxxx/bar/baz/yyyyy
用最短的命令跳转到该目录?
答案1
您可以根据需要利用 shell 函数来提供此功能:
change() { path=`pwd`; cd `echo $path | sed "s/$1/$2/"`; }
将从 /foo/bar/ 调用:
change "bar" "gazi"
请注意,此示例不需要“”,但对于特殊字符串(例如名称中包含空格字符的目录)则需要“”。
答案2
不是那么短,但有效:cd ${PWD/foo/bar\/baz}
答案3
cd ../../bar/baz/yyyyy
cd $(echo $PWD | sed 's|foo|bar/baz|')
第二个看起来“更酷”,但第一个更短。
答案4
假设您更改为/xxxxx/foo/yyyyy
withcd /xxxxx/foo/yyyyy
并希望在此命令之后直接更改到其他目录,您可以使用!!:s/foo/bar\/baz/
.这意味着,重复最后一个命令,但替换foo
为bar/baz
.
当您在两个cd
s 之间执行某些命令时,可以使用!cd:s/foo/bar\/baz/
.这意味着,重复上一个cd
命令并替换。
有关更多示例和历史命令,请查看Bash 参考手册。