Linux 如何为sed转义某些字符?
我想从文件中删除一行,并理解这可以通过sed完成 下面的命令失败,因为未终止的地址regexLinux 如何为sed转义某些字符?,linux,sed,Linux,Sed,我想从文件中删除一行,并理解这可以通过sed完成 下面的命令失败,因为未终止的地址regex sed -i '/$settings['file_temp_path'] = '../tmp';/d' file.php 在读了答案之后,我马上回答了问题。我现在明白这是因为字符[和/必须转义] 尝试此操作后,下面的代码仍然不成功 sed -i '/$settings\['file_temp_path'] = '..\/tmp';/d' file.php 这有什么问题?我遗漏了什么?您需要转义模式中
sed -i '/$settings['file_temp_path'] = '../tmp';/d' file.php
在读了答案之后,我马上回答了问题。我现在明白这是因为字符[和/必须转义]
尝试此操作后,下面的代码仍然不成功
sed -i '/$settings\['file_temp_path'] = '..\/tmp';/d' file.php
这有什么问题?我遗漏了什么?您需要转义模式中的几个特殊字符,包括
$
file.php的内容示例:
foo
$settings['file_temp_path'] = '../tmp';
bar
示例代码:
$ sed -i "s/\$settings\['file_temp_path'\] = '..\/tmp';//" file.php
$ cat file.php
foo
bar
这可能适用于您(GNU-sed):
当regexp/replacement包含匹配分隔符时(通常/
),它可以转义/引用,也可以更改分隔符,即/\/tmp/
或\\\\\/tmp\\\
。注意,在替换命令s/\/tmp/replacement/
的情况下,也可以是s\/tmp\\\\\
,并且前导分隔符不需要转义/引用
元字符,即^
,$
,[
,*
,
,
,\
和&
必须由\
转义/引用,或放在字符类中,例如
应为\.
或
根据经验,sed命令应该用单引号括起来,对于要包含在regexp中的单引号,它们应该替换为关闭现有命令的\''
,shell转义/引用a'
,然后重新打开下一个sed命令
也可以使用双引号“
,但可能会产生意外的副作用,因为它们对shell插值开放
注意:如果将regexp/替换定界符放在字符类中,则不需要对其进行转义/引用,即如果/
是定界符,则[/]
与\/
相同。另外请注意,{
,}
、|
、?
和+
如果要表示其文字值,则不应转义/引用它们,除非调用了-E
或-r
sed wh命令行选项,在这种情况下,它们应该是,即+
表示加号,就像调用-E
时一样调用-E
或-r
时,\+
和+
表示前面的一个或多个字符/组。要删除的行是什么样子?$settings['file\u temp\u path']='../tmp';谢谢。我发现这会打印整个文件,并且我确实看到正确的行已被删除,并且保留了一个空行空间。但是在查看文件内容时,我发现该行仍然存在。是否需要另一个步骤来保存更改?是的,您需要使用-I
标志。我没有包括它,因为我想如何编辑输出..让我来编辑。如果您对我的答案满意,请参见此处所做的操作:因此需要添加一些内容。除文件名外的所有内容都包含在“”中,然后是$,[,],和/必须使用/。s/开头和//结尾的目的是什么?这只是替换的sed
语法。您不应该对我的代码进行任何更改
sed -i '\#\$settings\['\''file_temp_path'\''\] = '\''\.\./tmp'\'';#d' file