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-script で 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 に答える