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


26

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

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

次の行を置き換えます。

#maxmemory <bytes>
で:
最大メモリ26GB

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

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

エラーが表示されます:

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

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

どうすれば目的を達成できますか?そのエラーはどういう意味ですか?(だから私はそれから学ぶことができます)

回答:


26

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

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


11

確かに

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

正規表現を単一引用符で囲み、シェルが複数の引数に分割せずに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

動作します。

お役に立てば幸いです。


1
これはそうsedではありません。これを行うのはシェルです。
JdeBP 14年

あなたは正しいです、もちろん、頭を上げてくれてありがとう:)
Sxilderik 14年

3

このコマンドにより、ユースケースが解決されます。

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

5
たぶん、あなたは小さな説明を追加したいかもしれません。
davidbaumann

2
-eは、私の場合にはMacOSのために必要だった
cancerbero
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.