正規表現文字列を置き換える Linux sed コマンド

正規表現文字列を置き換える Linux sed コマンド

次の行を含むテキストファイルをプログラムで編集しようとしています。

db.username="tata"
db.password="toto"

私はそれが次のように見えるようにしたいです:

db.username="fofo"
db.password="bar"

正規表現は次のとおりです。

 ^\s*db.username="([^"]*)

このコマンドを使用しようとすると

sed -i -E '^\s*db.username="([^"]*)' 'fofo' file.txt

エラーが発生します。

sed: -e expression #1, char 1: unknown command: `^'

ベストアンサー1

grep正規表現と置換を混ぜていますsed

次のいずれかを使用してください。

sed -e '/db\.username/s/"[^"]*"/"foo"/' txt
db.username="foo"
db.password="toto"

どこ

  • /db\.username/sedにdb.usernameをオンラインで操作するように指示します(.sedの特殊文字)。
  • s変える
  • "[^"]*"引用文1個、引用文ではなく複数の引用文、引用文1個
  • "foo"
  • /db.username/一致しますdb_usernamedbXusername....

または

sed -e 's/db\.username="[^"]*"/db.username="foo"/' txt
db.username="foo"
db.password="toto"

より詳細に説明するためにsedパターンをキャプチャできます。

sed -e 's/db\.username="\([^"]*\)"/usename is \1/' txt
usename is tata
db.password="toto"
  • \( \)テキストキャプチャ
  • \1最初にキャプチャしたテキストの使用

grepいいね

grep -Eo '"[^"]*"' txt
"tata"
"toto"

おすすめ記事