ファイル内の式の右側を見つけて使用したいですsed
。これにより、grep
我々は以下を見る。
$ grep power TheFile
power = 1
また、cut
次の値にアクセスできます。
$ grep power TheFile | cut -d = -f 2
1
sed
ただし、そのコマンドを使用してパイプする方法がわかりません。これを達成する方法についてのアイデアはありますか?
答え1
どうですか?
sed '/^power /s/=.*$/= your-replacement/' TheFile
/^power /
はアドレス指定子です。この場合、regexに一致する行を探します^power
。s
正規表現に一致する代替コマンドです。つまり=
、..ファイルの内容をパイプする必要はありません。ファイルの内容(またはファイルのリスト)をコマンド引数として指定できます。何かをにパイプで接続したい場合、または必要に応じて
sed
簡単です| sed ..
。ただです。たとえば、最初の単語の直後のスペースがタブで
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