0

我想在 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 脚本中看到的那样,将有很多简单的命令通过管道连接在一起。所有这些管道都应该开始stdin并将最终结果发送到stdout.

4

1 回答 1

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
于 2012-06-07T09:51:30.207 回答