入力ファイルを使用してスクリプトで変更されたファイル -
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