私は、自動的に次の操作を実行できるスクリプトを作りたい:ファイルの上に複数のgrepを作成するスクリプトを作成するには?
grep 'string1' file.txt | grep 'string2' | grep 'string3' ... | grep 'stringN'
アイデアは、スクリプトは次のように実行することができるということである。
myScript.sh file.txt string1 string2 string3 ... stringN
、スクリプトがすべての行を返すことがありますすべての文字列を含むfile.txt
です。例えば
、file.txt
は次のように見える場合:
hello world
hello world run
hello planet world
そして、私はこのようなgrepのを行うことができます。
grep hello file.txt | grep world
と私が手:
hello world
hello world run
hello planet world
私がしたいです定義されていない数の文字列をパラメータとして、これを自動的に作成するスクリプトを作成します。
文字列の数が変わる可能性があるので、これを達成するのは難しいことがわかりました。まず、私はmyScript.sh
にこのようargs
と呼ばれる配列を作成しようとしました:
#!/bin/bash
args=("[email protected]")
引数を格納する目的で。私は${args[0]}
が私のfile.txt
になることを知っています。残りの部分は、別のgrepsで使用する必要がある文字列ですが、問題を解決するための最善の方法であるかどうかはわかりません。私はこれをどのようにプログラムするかについての提案を感謝します。
私はあなたのコードをmyScritpt.shというファイルに貼り付けてmyScript.sh file.txt string1を実行するので、あなたのスクリプトをどのように実行するのかわかりません。string1 ... stringNですが、動作しません。 #!/ bin/bashの代わりに#!/ bin/shを書いた理由を知っているので、これはbashスクリプトで行うことができ、この単純なケースではPythonを使う必要はないと思います。 – neo33
Bashは 'sh' aka Bourneシェルのスーパーセットです。このスクリプトにはBash固有の構文はありませんが、あなたが何とかもっと快適になるようにするならば、もちろん、ShebangをBashを指すように変更することは自由です。いずれにしても、 '。/ myScript.sh'を使ってスクリプトを' chmod + x'の後に実行するとよいでしょう(対話的なコマンドのための明示的な '.sh'拡張を勧めていますが、 Bourne、Bashではなく、スクリプト)。 – tripleee
このスクリプトは単純ですが完全には堅牢ではありません。あなた自身の個人的な使用のために、そして/またはその欠点と限界が正しく文書化されているので、それはそれが良い方法です。パブリック配布用のツールでは、PythonやPerlに移りました。なぜなら、ユーザが提供するスクリプトの断片を使って 'sed'が完全に頑強にするのは難しいからです。 – tripleee