Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Sed - Fatal编程技术网

Regex 如何在Sed中查找[]内的文本?

Regex 如何在Sed中查找[]内的文本?,regex,sed,Regex,Sed,这类似于已经提出的问题。然而,我正在寻找一个具体的答案。我的文本类似于以下内容: 一些示例文本[带有一些额外文本].foo 我只需要抓取括号内的文本。到目前为止,我的尝试都是徒劳的。我可以用其他工具解析该行,但似乎无法使用Sed正确解析该行。以下是替换括号内文本的示例: $ echo 'Some sample text [with some extra text].foo' | sed -e 's/\[\(with some extra text\)\]/<\1>/g' Some s

这类似于已经提出的问题。然而,我正在寻找一个具体的答案。我的文本类似于以下内容:

一些示例文本[带有一些额外文本].foo


我只需要抓取括号内的文本。到目前为止,我的尝试都是徒劳的。我可以用其他工具解析该行,但似乎无法使用Sed正确解析该行。

以下是替换括号内文本的示例:

$ echo 'Some sample text [with some extra text].foo' | sed -e 's/\[\(with some extra text\)\]/<\1>/g'
Some sample text <with some extra text>.foo
$echo'一些示例文本[带有一些额外文本].foo'| sed-e的/\[\(带有一些额外文本\)\]//g'
一些示例text.foo
像这样的东西

$ echo Some sample text [with some extra text].foo | sed -e 's/.*\[\([^]]*\)\].*/\1/g'
with some extra text

$ echo Some sample text [with some extra text].foo | sed -e 's/.*\[\([^]]*\)\].*/Your text was: "\1", okay?/g'
Your text was: "with some extra text", okay?

这个答案中的关键点是在sed表达式周围使用单引号,这应该在答案中说明。这是至关重要的;否则,shell将删除反斜杠和sed“sees”表达式,而不删除它们,并且不会按照您希望的方式对其进行解释。如果每行有多个括号内的表达式,并且括号内的表达式可以跨多行扩展,那么使用逐字符解析器似乎可以更轻松地完成这项工作。对于sed来说,这将是一个相当糟糕的练习。
echo "Some [sample inside] text [with some extra text].foo" | sed -n '/\[/{ s/\]/\n/g; s/.[^\n]*\[/:/g;s/\..*//;p}'
:sample inside:with some extra text