"key = value" 行: 特定のキーの値を変更する方法は?

"key = value" 行: 特定のキーの値を変更する方法は?

ファイル内の式の右側を見つけて使用したいですsed。これにより、grep我々は以下を見る。

$ grep power TheFile 
power                 = 1

また、cut次の値にアクセスできます。

$ grep power TheFile  | cut -d = -f 2
 1

sedただし、そのコマンドを使用してパイプする方法がわかりません。これを達成する方法についてのアイデアはありますか?

答え1

どうですか?

sed '/^power /s/=.*$/= your-replacement/' TheFile
  1. /^power /はアドレス指定子です。この場合、regexに一致する行を探します^power

  2. s正規表現に一致する代替コマンドです。つまり=、..

  3. ファイルの内容をパイプする必要はありません。ファイルの内容(またはファイルのリスト)をコマンド引数として指定できます。何かをにパイプで接続したい場合、または必要に応じてsed簡単です| sed ..。ただです。

  4. たとえば、最初の単語の直後のスペースがタブでpowerある場合は、代わりにそのスペースを使用してください[[:blank:]]。一部のバージョンでは、明示的なタブ文字をsed使用できます。\t

答え2

TheFile単語で始まり、後に一定量のスペースと等号が続く行を探して、等号のpower後に続く内容を次に置き換えるにはsomething

sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile

[[:blank:]]*ゼロ個以上のスペースまたはタブに一致します。これにより、前後の空白が維持されます=。代替テキストは、\1最初の角かっこに一致する文字列部分を挿入します。

GNUなどを使用して変更するには、sedこの-iフラグを追加し、それ以外の場合は出力を新しいファイルにリダイレクトします。

テストしてみてください:

$ cat TheFile
power                 = 1
power123              = 1
power  123            = 1
power                 =
power                 =                 112

$ sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile
power                 = something
power123              = 1
power  123            = 1
power                 =something
power                 =                 something

関連情報