SEDを介して同様の単語に改行

SEDを介して同様の単語に改行

サンプル_init.oraファイルがあります。

ファイルに2行があります。

db_create_file_dest="DATAG"
control_files=('DATAG/DBNAME/controlfile/control01.ctl','DATAG/DBNAME/controlfile/control02.ctl')

2行目をDATAGからDATAC2に変更したいと思います。どのような方法がありますか?多くのSED / AWKフォーラムを試しましたが、オプションはありませんでした。 SEDに基づく応答は高い評価を受けます。

答え1

あなたの質問は「似たような」行に言及していますが、それをどのように区別するのかを教えてくれません。

たとえば、すべてのインスタンスを次のようにDATAG置き換えます。DATAC2 ただcontrol_files利用可能な文字列で始まる行

sed '/^control_files/ s/DATAG/DATAC2/g'

^control_files別の区別されるパターンに置き換えると、一般的な方法で動作します。

答え2

最も確実なsedソリューションは次のとおりです。

sed 2s/DATAG/DATAC2/g sample_init.ora > new_file.ora

またはsedがサポートしている場合は、その場で編集してください-i

sed -i 2s/DATAG/DATAC2/g sample_init.ora 

sed コマンドは次のとおりです。

  • 2- 2号線
  • s//- 検索と交換
  • g- 最初のゲームだけでなく、すべてのゲームを交換します。

答え3

これが次のとおりです。精密ファイルに行が表示される形式は、次を使用します。

sed -i 's/DATAG\//DATAC2\//g' <filename> > <new_filename>

2行目のDATAGインスタンスの後に「/」がありますが、1行目にはないため、これは機能します。したがって、実行すると、提供した例が表示されます。

db_create_file_dest="DATAG"
control_files=('DATAC2/DBNAME/controlfile/control01.ctl','DATAC2/DBNAME/controlfile/control02.ctl')

ファイルのどこにあるかは問題ではありません。

関連情報