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代替
  • "[^"]*"一个报价,任意数量的非报价,一个报价
  • "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"

相关内容