ファイルの Grep 変数

ファイルの Grep 変数

入力ファイルを使用してスクリプトで変更されたファイル -

141,141_1,bar,honda,ps2_0,割り当てられていない,ps3_0,割り当てられていない,ps4_0,割り当てられていない,ps5_0,割り当てられていない,ps6_0,割り当てられていない,ps7_3,until,will,.....

入力ファイル -

141. PS7、ティルウェル

これで、ps7_3列が正しい値に更新されていることを検索する必要があります。

だから、入力ファイルから列を分離しました。

while read -r line;
do
sub1=$(echo $line|cut -f 1 -d ',');
sub2=$(echo $line|cut -f 2 -d ',');
sub3=$(echo $line|cut -f 3 -d ',');
sub4=$(echo $sub2'.*,'$sub3|sed -e "s/\(.*\)\r/'\1'/");
echo $sub1;
echo $sub2;
echo $sub3;
echo $sub4;
grep $sub4 modded_file.csv.dat;
done<input.csv

出力は -

141
ps7
TILL WILL
'ps7.*,TILL WILL'
grep: WILL': No such file or directory

しかし、実行すると grep 'ps7.*,TILL WILL' modded_file.csv.dat動作します。上記のような変数をファイルにどのようにgrepしますか?

ベストアンサー1

入力が示すように、変数sub4にスペース記号があるので、次の行を書き直します。

grep $sub4 modded_file.csv.dat;

~になる

grep -- "$sub4" modded_file.csv.dat;

(@philipposが追加しました) そして一重引用符は検索パターンの一部と見なされるため、$sub4含めないでください。'

私はあなたの誤解が引用と拡張が行われる順序だと思います。変数は最初に拡張され、次に引用されるので、拡張後に変数の一重引用符が文字列を引用すると思います。しかし、実際には引用は変数拡張の前に行われるため、引用が必要です。$sub

おすすめ記事