我相信这很容易,但我找不到任何答案。我想做的是:
echo file.war | sed s/.war// | rm -rf ???
传递给sed命令的输出rm -rf
。
不确定这是否是正确的方法......
提前感谢您的帮助!
答案 0 :(得分:3)
这就是'xargs'所做的。
echo file.war | sed s/\.war$// | xargs rm -rf
请注意我对正则表达式的更改。它需要锚定和'。'需要逃脱。
答案 1 :(得分:1)
bash中的其他可能性:
rm -rf $(echo file.war | sed 's/\.war$//')
使用变量和shell parameter expansion:
file=file.war
rm -rf "${file%.war}"
使用here-string(以及命令替换)代替echo | sed
:
rm -rf $(sed 's/\.war$//' <<< "file.war")
这实际上只是为了向您展示命令替换$(...)
的事情(如果您的文件名包含像空格这样的有趣符号,则可以避免失败的xargs)。同样为了向您展示,在您的情况下,sed
无用(感谢shell参数扩展),如果您确实需要sed
,echo | sed
可以在{bash
中避免1}}。
我不知道你到底要做的是什么。我可以想象:
您正在尝试删除所有文件 file ,以便当前目录中存在 file.war 。在这种情况下,我会这样做:
for file in *.war; do
rm -rf -- "${file%.war}"
done
您有一个名为 filenames 的文件,其中包含以下行:
file1.war
file2.war
...
filen.war
并且您要删除所有文件 file1 , file2 ,..., filen 。然后我会这样做:
while read -r file; do
[[ ( $file = *.war ) && ( -f $file ) ]] || continue
rm -rf -- "${file%.war}"
done < filenames
答案 2 :(得分:1)
另一种方法是
rm -rf `echo file.war | sed s/\.war$//`