Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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或perl仅当第一个内部单词匹配时才删除外括号_Regex_Perl_Bash_Sed - Fatal编程技术网

Regex sed或perl仅当第一个内部单词匹配时才删除外括号

Regex sed或perl仅当第一个内部单词匹配时才删除外括号,regex,perl,bash,sed,Regex,Perl,Bash,Sed,使用GNUsed,我需要删除像(单击此处)这样的附加短语,包括paren。单击此处后的文本有所不同,但我需要删除整个外圆括号 我在以下方面尝试了许多变化,但似乎没有找到正确的变化: sed -e 's/\((click here.*[^)]*\)//' 编辑< /强>愚蠢地,我没有注意到在括号中的中间经常有一个断线,所以 SED可能不起作用。例如: (click here to enter some text) 如果没有嵌套参数,您可以尝试以下方法: sed -e 's/(click he

使用GNU
sed
,我需要删除像
(单击此处)
这样的附加短语,包括paren。单击此处后的文本有所不同,但我需要删除整个外圆括号

我在以下方面尝试了许多变化,但似乎没有找到正确的变化:

sed -e 's/\((click here.*[^)]*\)//'

<强>编辑< /强>愚蠢地,我没有注意到在括号中的中间经常有一个断线,所以<代码> SED可能不起作用。例如:

(click here to
enter some text)

如果没有嵌套参数,您可以尝试以下方法:

sed -e 's/(click here [^)]*)//'

使用perl,您可以运行:

perl -00 -pe "s/\(click here [^)]*\)//g" inputfile > outputfile

它将以字符串形式读取输入文件,然后替换所有出现的
(单击此处anychar,但“(”)
,然后在输出文件中输出所有内容。

这里还有另一种
sed
方法,它将完整的输入保留在保留缓冲区中:

# see http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/
echo '
()
(do not delete this)
()
(click here to
enter some text)
()
' | 
sed -n '1h;1!H;${;g;s/(\([^)]*\))/\1/g;p;}'

其结果是删除
单击此处
和紧跟其后的任何单个单词,留下剩余的单词和参数。例如
(单击此处输入文本)
变成
(输入文本)
@Michael,可能不会。至少它在这里起作用。无论如何,我刚刚发现你不需要逃避父母。我相应地编辑了答案。@Michael:你能提供一个它不起作用的测试用例吗?考虑:
echo“这是一个(单击此处输入文本)系统的测试”| sed-e/(单击此处[^)]*)//“
注意,在最后一次/if多次单击可能会出现在一行之后,您可能需要一个g。@Seth Robertson我刚刚找到了不起作用的地方,并用手掌捂住了脸。在我正在测试这个操作的文件中,断点有时出现在括号中的中间。@米迦勒:它将记录分隔符定义为NULL,因此整个文件以单个字符串读取。