tcshスクリプト - grepの結果で改行を維持します。

tcshスクリプト - grepの結果で改行を維持します。

私はテキストファイルからいくつかのパターンを理解するために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

引用する

関連情報