我有一个文件以路径作为参数:
./<filename> /path/to/file...
我想要做的是将/ path / to / ...部分替换为/ another / file /...
我试图以下列方式提出论点:
CUR_PATH=$1
OLD_PATH="\/path\/to\/"
NEW_PATH="\/another\/file\/"
sed "s/$OLD_PATH/$NEW_PATH/" $CUR_PATH
但这不起作用,因为sed试图在CUR_PATH上实际修改文件,而不是CUR_PATH的实际语句。我该如何解决?感谢。
答案 0 :(得分:2)
您不需要sed
。 bash
内置的变量替换。您可以使用:
NEW_PATH=${OLD_PATH/\/path\/to\//\/another\/file\/}
请注意/
的反斜杠,因为表达式为${variable/old/new}
。
答案 1 :(得分:2)
您可以像迭戈建议的那样使用bash的替换,但对于这个特殊情况,它可能更干净:
NEW_PATH="/another/file/${OLD_PATH##*/}"
将使用字符串“/ another / file /”替换OLD_PATH的整个前导路径。请注意,只有在OLD_PATH可能包含空格时才需要双引号。
如果您确实想使用sed,只需将OLD_PATH回显到管道即可。并且,当使用sed操作文件名时,使用不同的分隔符很方便。例如:
NEW_PATH=$( echo $OLD_PATH | sed s@/path/to/my@/another/file@ )
答案 2 :(得分:2)
另一种可能性是使用here字符串:
CUR_PATH=$1
OLD_PATH="/path/to/"
NEW_PATH="/another/file/"
sed "s|$OLD_PATH|$NEW_PATH|" <<< $CUR_PATH
另请注意,您可以更改sed中替换的分隔符,这样您就不必转义路径变量中的斜杠。