如何设置bash next bash操作输入等于上一次操作的输出?

时间:2013-06-20 14:50:32

标签: linux bash

我相信这很容易,但我找不到任何答案。我想做的是:

echo file.war | sed s/.war// | rm -rf ???

传递给sed命令的输出rm -rf

不确定这是否是正确的方法......

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

这就是'xargs'所做的。

echo file.war | sed s/\.war$// | xargs rm -rf

请注意我对正则表达式的更改。它需要锚定和'。'需要逃脱。

答案 1 :(得分:1)

中的其他可能性:

这实际上只是为了向您展示命令替换$(...)的事情(如果您的文件名包含像空格这样的有趣符号,则可以避免失败的xargs)。同样为了向您展示,在您的情况下,sed无用(感谢shell参数扩展),如果您确实需要sedecho | 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$//`