我相信这真的很容易,但我没有找到任何适合我的答案。我想做的是:
echo file.war | sed s/.war// | rm -rf ???
传递给rm -rf
sed 命令的输出。
不知道这是否是获得这个的正确方法......
提前感谢您的帮助!
这就是“xargs”所做的。
echo file.war | sed s/\.war$// | xargs rm -rf
并注意我对您的正则表达式的更改。它需要锚定和'。需要逃脱。
其他可能性,在bash:
使用命令替换:
rm -rf $(echo file.war | sed 's/\.war$//')
使用变量和shell 参数扩展:
file=file.war
rm -rf "${file%.war}"
代替echo | sed
, 使用here-string(和命令替换):
rm -rf $(sed 's/\.war$//' <<< "file.war")
这实际上只是为了向您展示命令替换$(...)
的事情(避免 xargs 如果您的文件名包含有趣的符号(如空格),则会惨遭失败)。还要向您展示,在您的情况下,sed
它是无用的(感谢 shell 参数扩展),如果您真的需要sed
,echo | sed
可以在bash
.
我不知道你到底想达到什么目的。我可以想像:
您正在尝试删除当前目录中存在 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
另一种方法是
rm -rf `echo file.war | sed s/\.war$//`