Bash 复制和替换文件名字符串中的内容
我正在尝试将文件Bash 复制和替换文件名字符串中的内容,bash,shell,Bash,Shell,我正在尝试将文件boot-1.5-SNAPSHOT.jar复制到boot-1.5.jar 我已经使用sed尝试了这个方法,但是我得到了一个错误。我知道语法不对,我希望有人能帮我完成 cp boot-* | sed -e 's:-SNAPSHOT::g' cp: missing destination file operand after ‘boot-1.5-SNAPSHOT.jar’ 这样做的想法是,脚本将不知道版本号,只知道jar将位于它试图从中复制文件的文件夹中。这就是为什么我用星号。版本
boot-1.5-SNAPSHOT.jar
复制到boot-1.5.jar
我已经使用sed
尝试了这个方法,但是我得到了一个错误。我知道语法不对,我希望有人能帮我完成
cp boot-* | sed -e 's:-SNAPSHOT::g'
cp: missing destination file operand after ‘boot-1.5-SNAPSHOT.jar’
这样做的想法是,脚本将不知道版本号,只知道jar将位于它试图从中复制文件的文件夹中。这就是为什么我用星号。版本号经常更改,因此使用
cp file file2
将不起作用。不需要sed
,请使用:
或
在这种情况下:
${parameter/pattern/string}
模式替换。模式被扩展以生成
模式与路径名扩展中的模式相同。参数展开并
模式与其值的最长匹配将替换为字符串
注意,由于您处理的是文件,所以应该引用变量(否则带有空格字符的文件会把事情搞砸)
此外,您还可以创建符号链接而不是副本:
$ ln -s "$file" "${file/-SNAPSHOT/}"
您不能像这样将
cp
命令传送到sed
。您必须先对文件名使用sed
,然后再进行复制
f=$(echo boot-*SNAPSHOT.jar)
cp "$f" $(sed 's:-SNAPSHOT::' <<< "$f")
f=$(echo引导-*SNAPSHOT.jar)
cp“$f”$(sed's:-SNAPSHOT::“是的,但请强调引用更多的内容的重要性。原始文件名可能有空格;此外,PE可能会引入新的空格–或者是wordsplit。因此PE中的引号比简单扩展中的引号更重要。
$ ln -s "$file" "${file/-SNAPSHOT/}"
f=$(echo boot-*SNAPSHOT.jar)
cp "$f" $(sed 's:-SNAPSHOT::' <<< "$f")