私どこUnixファイルの句文字列は次のとおりです。
where c1 in (a) and c2 in (a,b,c) and c3 in ()
必要な出力は次のとおりです。
where c1 in ('a') and c2 in ('a','b','c') and c3 in ('')
誰かがこれを終えることができれば良いでしょう。
答え1
sed -r "s/,/','/g; s/\(([^)]+)\)/('\1')/g"
入力した入力がどのように変わるかを見てみましょう。
where c1 in (a) and c2 in (a,b,c) and c3 in ()
まず、カンマは引用符s/,/','/g
()で囲みます。
where c1 in (a) and c2 in (a','b','c) and c3 in ()
次に、空でない角括弧()s/\(([^)]+)\)/('\1')/g
内に引用符を追加します。
where c1 in ('a') and c2 in ('a','b','c') and c3 in ()
...欲しい結果です。
この正規表現は望ましくない方法で他の行に影響を与える可能性があるので注意してください。
答え2
ループを使用してこれを実行することもできます。
sed -e ':top' -e 's/\([(,]\)\([^),'\'']\{1,\}\)\([),]\)/\1'"'\2'"'\3/;t top'
または以下を使用してください-E
。
sed -E -e ':top' -e "s/([(,])([^),']+)([),])/\1'\2'\3/;t top"
答え3
ファイルに投稿で説明されているWHERE句のみがある場合は、次のことを行う必要があります。
$ sed -r "s/(\(|,)([^ ),]+)(\)|,)/\1'\2'\3/g" <Filename>
where c1 in ('a') and c2 in ('a',b,'c') and c3 in ()
ファイルがSQL文の残りの部分や複数のSQL文などの他のデータで埋められると、ファイル内の他のテキストが中断される可能性があります。振り返り/予測機能がないため、sed
より安全な代替策を検討できますperl
(WHERE句が各SQL文の残りの部分とは異なる行にある場合)。
$ perl -ne "s/(\(|,)([^ ),]+)(\)|,)/\1'\2'\3/g if /where/; print;" <Filename>
where c1 in ('a') and c2 in ('a',b,'c') and c3 in ()