web-dev-qa-db-ja.com

ファイル内の行をパターンでsedに置き換える方法は?

私はsedに関する多くのドキュメントを読んでいますが、それでも私の特定のユースケースでは困惑しています。

Confファイルのこの行を自分の行に置き換えたい:

この行を置き換えます:

#maxmemory <バイト>
maxmemory 26GB

これは私が試したものです:

sed s/maxmemory。* bytes。*/maxmemory 26gb//etc/redis/redis.conf

エラーが発生します:

sed:-e expression#1、char 30:終了していない `s 'コマンド

それが何を意味するのかわからないので、それは私を困らせます。だから私の質問は:

どうすればやりたいことができますか?そのエラーはどういう意味ですか? (だから私はそれから学ぶことができます)

28
Henley Chiu

-iを忘れました。変更を行う必要があります:

$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

29
Phantom

確かに

エラーは、引用符がない場合、シェルが引数を区切るためにスペースを使用することを意味します。したがって、maxmemory26gbの間のスペースは最初の引数を終了するものと見なされます。したがって、sedがその引数の1つとして解析するようになると、端子/が終了しますコマンド。

正規表現を単一引用符で囲み、シェルがそれを複数の引数に分割せず、単一の引数としてsedに渡すようにして、問題を解決します。

$ sed s/maxmemory.*/maxmemory 26gb/ /some/file/some/where.txt
sed: -e expression n°1, caractère 23: commande `s' inachevée

ながら

$ sed 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt

動作します。

お役に立てば幸いです。

11
Sxilderik

ユースケースはこのコマンドで解決されます。

sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf
3
Indian Velumani