GNU/Linux >> Linux の 問題 >  >> Linux

sed:見つかった場合は行を置き換えるか、見つからない場合はファイルの最後に追加する方法は?

sed を使用すると、実際には非常に簡単です :行が一致する場合は、それを h にコピーするだけです 古いスペースの場合 s 値を代入します。
La$ で t 行 ex ホールド スペースとパターン スペースを変更し、後者が空かどうかを確認します。空でない場合は、置換がすでに行われているため何もしないことを意味します。空の場合は、一致が見つからなかったことを意味するため、パターン スペースを目的の variable=value に置き換えます 次に、ホールド バッファーの現在の行に追加します。最後に、ex もう一度変更:

sed '/^FOOBAR=/{h;s/=.*/=newvalue/};${x;/^$/{s//FOOBAR=newvalue/;H};x}' infile

上記は gnu sed です 構文。ポータブル:

sed '/^FOOBAR=/{
h
s/=.*/=newvalue/
}
${
x
/^$/{
s//FOOBAR=newvalue/
H
}
x
}' infile

これはおそらく短縮できます。これは単一の sed コマンドではなく、grep も使用しますが、これは基本的にあなたが望んでいるもののようです。これは 1 行で、ファイルをその場で編集します (一時ファイルはありません)。

grep -q "^FOOBAR=" file && sed "s/^FOOBAR=.*/FOOBAR=newvalue/" -i file || 
    sed "$ a\FOOBAR=newvalue" -i file

これはより単純な sed です sed が見つからないので、アプローチします hold space 扱いやすい。 hold space に慣れている場合 、don_crissti アプローチを使用すると、既存の行から何かを保持する追加の機会が得られますが、これは通常非常にまれです。

このアプローチでは、ドロップしたい行を除いてすべてを印刷し、最後に置換を追加します。

sed -n -e '/^FOOBAR=/!p' -e '$aFOOBAR=newvalue' infile

Linux
  1. Linuxでファイルの終わりにテキストを簡単に追加する方法

  2. ファイル内の文字列を置き換える方法は?

  3. ファイルの最初の行の前にテキストを挿入する方法は?

  1. Linuxでファイルの終わりにテキストを追加する方法

  2. ファイルに複数の行を追加するにはどうすればよいですか?

  3. sed:コマンドが見つかりません

  1. sed のようなテキストを python に置き換えるにはどうすればよいですか?

  2. Linuxコマンドラインで複数のファイルの文字列を置き換える方法

  3. Linuxでjar内のファイルをコマンドラインに置き換える方法は?