如何正确处理Bash脚本中的IO?

时间:2012-06-07 09:41:55

标签: bash

我想在Bash脚本中加入大量过滤,以使我的过滤命令更短一点:

#before:
$ cat unreadable.log | grep "bla" |[...]| sed "s/blubb//" >>readable.log
#after:
$ cat unreadable.log | the_script_I_m_writing.sh >>readable.log

但是如何正确处理bash脚本中的IO,after行可以如图所示执行? 正如您在bash脚本中看到的那样,会有很多简单的命令通过管道连接在一起。所有这些管道应该以{{1​​}}开头,并将最终结果发送到stdin

1 个答案:

答案 0 :(得分:3)

如果没有给出文件参数,

cat将从标准输入读取。

#!/usr/bin/env bash
cat | grep "bla" | sed 's/blubb//'

或者,只需编写一个接受源文件名作为参数的脚本。

#!/usr/bin/env bash
cat "$1" | grep "bla" | sed 's/blubb//'

使用:./script unreadable.log


在这种简单的情况下,您也可以跳过cat,然后从grep开始。

#!/usr/bin/env bash
grep "bla" | sed 's/blubb//'

使用:

# unnecessary cat if it's just a file
cat file | ./script.sh

# get stdin from file
./script.sh < file