sed更改线路错误消息

sed更改线路错误消息,sed,edit,Sed,Edit,我有一个配置文件需要(再次)更改,行是 set wrapper_code=C:\windows\drivers\cache 我需要把它改成 set wrapper_code=/home/harry/solo/run 我写 cat Proxy.bat | sed -i.bk -e 's/\(^set wrapper_home\=\).*/\/home/'1${dbuser}'/gateway/service\' Proxy.bat 我收到一条错误消息 sed: -e expression

我有一个配置文件需要(再次)更改,行是

set wrapper_code=C:\windows\drivers\cache
我需要把它改成

set wrapper_code=/home/harry/solo/run
我写

cat Proxy.bat | sed -i.bk -e 's/\(^set wrapper_home\=\).*/\/home/'1${dbuser}'/gateway/service\'  Proxy.bat
我收到一条错误消息

sed: -e expression #1, char 37: unknown option to `s'

我的代码字符串有什么问题

如果您使用的是
/
,因为模式分隔符是
sed
,您必须转义字符串(路径)中的斜杠。要避免这种情况,请使用不同的分隔符:

sed -i.bk -e 's%\^set wrapper_code=C:\\windows\\drivers\\cache%set wrapper_code=/home/harry/solo/run%'  Proxy.bat
您还必须避开反斜杠,因为它们在
sed
中有特殊含义


cat
部分无效。

我尝试了该行,但它没有编辑文件中的行。我在一个shell脚本中使用这行代码,所以cat部分是必需的?如果您能告诉我如何在不使用cat的情况下使用sed,这也会有所帮助。@user1794918:只需将文件名作为
sed
的参数。但我认为这就是cat打开流以将文件传递给sed的目的。@user1794918:
cat
是一个外部程序。要运行它,必须启动一个新进程,这需要时间。重定向(
通常情况下,使用
cat
将数据传输到
sed
仅仅是无用的,但在这种情况下,由于使用了
-i
,这是灾难性的。
-i
会导致
sed
完全忽略
cat
提供给它的数据,而改为修改名为
-
的文件e避免。sed的
-i
选项也应如此。无论是谁用负面评论标记我的问题。这样做似乎有点不公平,因为这个论坛被认为是关于问题的。必须表明我在开场白中做了研究,并告诉我保持问题的重点是令人困惑的。你想让我告诉你吗我在发布问题之前做了什么?我想这个网站应该是关于帮助的,而不是关于在发布模拟问题之前制定或研究一个问题的评分系统。这个网站已经准备好了强制研究,为什么会认为一个人在发布问题之前不会看?你不能得到答案绕开它,因为即使问题写在右边,也会有搜索。因此,用否定标记问题是tyrencal的做法,你不知道该人做了什么搜索。建议,让每个人都可以观看培训视频,观看每个命令,然后只允许在他们完成后提问所有的培训视频。