2

我相信这真的很容易,但我没有找到任何适合我的答案。我想做的是:

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

传递给rm -rfsed 命令的输出。

不知道这是否是获得这个的正确方法......

提前感谢您的帮助!

4

3 回答 3

3

这就是“xargs”所做的。

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

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

于 2013-06-20T14:58:57.257 回答
1

其他可能性,在

  • 使用命令替换

    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 参数扩展),如果您真的需要sedecho | 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
    
于 2013-06-20T15:54:59.373 回答
1

另一种方法是

rm -rf `echo file.war | sed s/\.war$//`
于 2013-06-20T15:59:15.320 回答