私はsedに関する多くのドキュメントを読んでいますが、それでも私の特定のユースケースでは困惑しています。
Confファイルのこの行を自分の行に置き換えたい:
この行を置き換えます:
#maxmemory <バイト>
maxmemory 26GB
これは私が試したものです:
sed s/maxmemory。* bytes。*/maxmemory 26gb//etc/redis/redis.conf
エラーが発生します:
sed:-e expression#1、char 30:終了していない `s 'コマンド
それが何を意味するのかわからないので、それは私を困らせます。だから私の質問は:
どうすればやりたいことができますか?そのエラーはどういう意味ですか? (だから私はそれから学ぶことができます)
-iを忘れました。変更を行う必要があります:
$ sed -i 's/maxmemory.*/maxmemory 26gb/' /some/file/some/where.txt
確かに
エラーは、引用符がない場合、シェルが引数を区切るためにスペースを使用することを意味します。したがって、maxmemory
と26gb
の間のスペースは最初の引数を終了するものと見なされます。したがって、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
動作します。
お役に立てば幸いです。
ユースケースはこのコマンドで解決されます。
sed -i -e 's/#maxmemory.*/maxmemory 26gb/g' /etc/redis/redis.conf