600以上のファイルで一重引用符を二重引用符で置き換え、二重引用符を一重引用符に置き換える必要があります。私は一日のほとんどをさまざまなトピックについて読むために送信します。私はいくつかの基本的なシェルスクリプトコマンドしか知らず、正規表現に慣れていないので混乱しています。
以下は私が作成した一般的なサンプルファイルです。
some text KEYWORD_1 table name column = "string" AND column = "string"
Additional text
.
.
.
some text KEYWORD_2 text 'text in quote' etc.
キーワードを使用して2行の引用符を変更したいと思います。キーワードが常に最初の行と最後の行にあることを保証することはできません。キーワードを検索し、その行のすべての引用符のみを変更するには、私の解決策が必要です。
SEDのメタデータを含む、このフォーラムの同様の質問で見つけたいくつかを試しました。このコマンドの使用方法を理解しようとしていますsed -i 's/foo\(.*baz\)/bar\1/' file
。トピックによると、このコマンドは「bazが同じ行に従う場合にのみfooをbarに置き換えます」私のキーワードは同じ行の後ろにありませんが、最初は正しく機能しません。
私も試してみましたが、ex -sc 'g/DEL/s/ALF/BRA/g' -cx file
何もできませんでした。コマンドラインでは実行できないとします。 600個のファイルをすべて開いたくはありません。
もちろん、一度試した結果、1行でgrep KEYWORD_1 file | sed -i "s/'/\"/g" file
はなくファイル内のすべての引用符が変更されました。
解決策は簡単だと確信しています。私はそれを見ることができません。どうすればいいですか?
要件に応じて、希望の出力は次のとおりです。
some text KEYWORD_1 table name column = 'string' AND column = 'string'
Additional text
.
.
.
some text KEYWORD_2 text "text in quote" etc.
ベストアンサー1
役割の変更
ある文字セットを別の文字セットに変更するのは通常tr
このコマンドの操作ですが、特定の行でのみこれを実行するには、次のsed
ようなコマンドを使用することをお勧めします。y
tr
sed -e "/^KEYWORD_1/ y/\"/'/" \
-e "/^KEYWORD_2/ y/'/\"/" \
file
ここの各コマンドはsed
ラインセレクタで始まり、間のパターンに一致するラインのみが機能することを/^KEYWORD/
示します。ここのパターンは文字で始まり、その行の先頭にあることを示します。sed
/
^
行セレクタの後には、文字をから同じ位置にある文字に置き換えるsed
代替コマンドが続きます。y/set1/set2/g
set1
set2
文字交換
"
それぞれを同じ行に'
、同時にそれぞれを置き換えるには、次のコマンドを1つだけ使用できます'
。"
sed -e "/^KEYWORD_1\|^KEYWORD_2/ y/\"'/'\"/" file