我正在尝试将文件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
将无效。
答案 0 :(得分:4)
不需要-e
,请使用Parameter Expansions:
sed
或
$ file=boot-1.5-SNAPSHOT.jar
$ echo ${file/-SNAPSHOT/}
boot-1.5.jar
在这种情况下:
$ {parameter / pattern / string}
模式替换。模式扩展为生成 模式就像路径名扩展一样。参数被扩展和 模式与其值的最长匹配将替换为字符串。
请注意,由于您正在处理文件,因此您应该引用变量(否则带有空格字符的文件会搞乱)。
此外,您可以创建符号链接而不是副本:
$ cp "$file" "${file/-SNAPSHOT/}"
答案 1 :(得分:2)
您无法将cp
命令传递给sed
。您必须首先在文件名上使用sed
,然后进行复制。
f=$(echo boot-*SNAPSHOT.jar)
cp "$f" $(sed 's:-SNAPSHOT::' <<< "$f")