Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如果正则表达式周围没有单引号,sed将出错_Regex_Shell_Sed - Fatal编程技术网

Regex 如果正则表达式周围没有单引号,sed将出错

Regex 如果正则表达式周围没有单引号,sed将出错,regex,shell,sed,Regex,Shell,Sed,我尝试在bash中执行以下命令: ls -1 | sed s/\(.*\)/"\1"/ 这是在ls的每个输出周围添加双引号,但结果显示 sed:1:“s/(.*)/\1/”:\1未在RE中定义 在正则表达式周围添加单引号后,得到了正确的结果。正确的答案是: ls-1 | sed's/\(.*\)/“\1/” 神权统治下我不需要外部引用,对吗?任何人都有相同的经历?单引号用于禁用各种序列的shell解析,包括反斜杠转义。如果不使用它们,则像\(这样的序列将作为(传递给sed。您可以通过在命令开头

我尝试在bash中执行以下命令:

ls -1 | sed s/\(.*\)/"\1"/
这是在
ls
的每个输出周围添加双引号,但结果显示
sed:1:“s/(.*)/\1/”:\1未在RE中定义

在正则表达式周围添加单引号后,得到了正确的结果。正确的答案是:

ls-1 | sed's/\(.*\)/“\1/”


神权统治下我不需要外部引用,对吗?任何人都有相同的经历?

单引号用于禁用各种序列的shell解析,包括反斜杠转义。如果不使用它们,则像
\(
这样的序列将作为
传递给sed。您可以通过在命令开头添加
echo
来检查这一点。

单引号用于禁用各种序列的shell解析,包括反斜杠转义。如果不使用它们,则像
\(
作为
传递给sed)(
。您可以通过在命令开头添加
echo
来检查这一点。

将命令发送到
echo
将显示sed看到的内容

$ echo sed s/\(.*\)/"\1"/
sed
嗯,sed脚本完全消失了。暴露的“*”迫使shell尝试匹配文件。让我们禁用它:

$ set -f
$ echo sed s/\(.*\)/"\1"/
sed s/(.*)/\1/
shell删除了引号和反斜杠。引用sed脚本:

$ echo sed 's/\(.*\)/"\1"/'
sed s/\(.*\)/"\1"/
如果得到正确的结果,sed将看到您想要给出的脚本。没有引号,我们如何做到这一点

$ echo sed s/\\\(.\*\\\)/\"\\1\"/
sed s/\(.*\)/"\1"/

这很难看。

将命令发送到
echo
将显示sed看到的内容

$ echo sed s/\(.*\)/"\1"/
sed
嗯,sed脚本完全消失了。暴露的“*”迫使shell尝试匹配文件。让我们禁用它:

$ set -f
$ echo sed s/\(.*\)/"\1"/
sed s/(.*)/\1/
shell删除了引号和反斜杠。引用sed脚本:

$ echo sed 's/\(.*\)/"\1"/'
sed s/\(.*\)/"\1"/
如果得到正确的结果,sed将看到您想要给出的脚本。没有引号,我们如何做到这一点

$ echo sed s/\\\(.\*\\\)/\"\\1\"/
sed s/\(.*\)/"\1"/

这太难看了。

引用的不是sed,而是shell。@franky:或者
sed的/*/“&”/
@Cyrus这是什么意思?来自
man sed
:“s/regexp/replacement/”:尝试将regexp与模式空间匹配。如果成功,请替换与replacement匹配的部分。替换可能包含特殊字符&用于引用模式空间中匹配的部分,特殊转义符\1到\9用于引用regexp中相应的匹配子表达式tes不是为sed而存在的,是为外壳而存在的。@franky:or
sed的/*/“&”/
@Cyrus这里是什么意思?来自
man sed
:“s/regexp/replacement/”:尝试将regexp与模式空间匹配。如果成功,请替换与replacement匹配的部分。替换可能包含特殊字符&以引用模式空间中匹配的部分,特殊转义符从\1到\9引用regexp中相应的匹配子表达式。