私はテキストファイルからいくつかのパターンを理解するためにtcshで単純なスクリプト(明らかに悪い考えですが良い考え)を書いています。以下を含むファイルがあるとしますanimal_names.txt
。
dog carrot
dog bolt
cat larry
cat brownies
bird parry
bird pirate
私はスクリプトを書いた:
set animals = "dog\|cat"
set names = `grep $animals animal_names.txt`
echo "$names"
目的は、「犬」または「猫」ですべての行を把握することです。しかし、私が得る出力は1行だけです。
dog carrot dog bolt cat larry cat brownies
何らかの方法で出力から改行文字が削除されます。改行を保存する方法はありますか?その他郵便はがき:q修飾子を使用することをお勧めしますが、私の場合は動作しませんでした。
答え1
」私が得る出力は1行だけです。- 残念ながら、スクリプトの問題の原因の1つに直面しました[t]csh
。改行文字を保存することは不可能です。奇妙な。代わりにbash
(または)を使用してくださいsh
。
これがファイルに書き込まれるとしますfind_animals
。
#!/bin/sh
animals='dog|cat'
names=$(grep -E "$animals" animal_names.txt)
echo "$names"
REシンボルをエスケープせずに、|
代わりにgrep
拡張正規表現(ERE)を使用するように指示されました。そのままにしておくこともできますが、このように読む方が簡単だと思います。
スクリプトを実行可能にする
chmod a+x find_animals
animal_names.txt
ファイルがあるディレクトリで実行します。
./find_animals
出力
dog carrot
dog bolt
cat larry
cat brownies
これを使用しようとすると、tcsh
次のように動作します。
#!/usr/bin/tcsh -f
set animals = 'dog|cat'
set temp = "`grep -E '$animals' animal_names.txt`"
set names = ""
set nl = '\
'
foreach i ( $temp:q )
set names = $names:q$i:r:q$nl:q
end
set names = $names:r:q
echo $names:q
引用する
- tcshはコマンド置換 `...`で改行を維持します。(非常に効果的なソリューション)
- 有害とみなされるCshプログラミング
- Cシェルを使用しない10の理由