我正在尝试以编程方式编辑一个文本文件,其中包含如下行:
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_username
,dbXusername
....
或者
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"