在shell变量中通过管道连接多个命令

时间:2013-02-05 17:46:58

标签: pipeline bash

我想做的是:

>STRIPPER='sed s/admin_editable=\"[01]\"// | sed s/runtime_editable=\"[01]\"//'
>cat file.txt | $STRIPPER > stripped.txt  

即。定义一个shell变量,它是多个命令的管道(我的命令恰好是sed),然后我可以调用它。我现在正在从命令行执行此操作,但最终可能会将其放入脚本中。

我已经尝试了两个'和'来封闭命令都不起作用。

sed: can't read |: No such file or directory
sed: can't read sed: No such file or directory
sed: can't read s/admin_editable=\"[01]\"//: No such file or directory
sed: can't read |sed: No such file or directory
sed: can't read s/runtime_editable=\"[01]\"//: No such file or directory
sed: can't read |: No such file or directory

我知道可能有一个正则表达式可以处理这种情况,但我想知道如何一般地进行管道。

1 个答案:

答案 0 :(得分:3)

这是一个使用函数而不是变量的好地方。

stripper() {
    sed s/admin_editable="[01]"// | sed s/runtime_editable="[01]"//
}

cat file.txt | stripper > stripped.txt  

您还可以删除useless use of cat

stripper < file.txt > stripped.txt