如何获取括号中指定的内容?

时间:2017-10-09 06:00:48

标签: regex linux bash shell pattern-matching

我想提取写在文件中的内容。我们举一个例子

{{{
      How 
      R 
      U
}}}

{{{ Hi }}}

我想像这样打印输出

 How
 R
 U

 Hi

3 个答案:

答案 0 :(得分:2)

嗯,这不是regex这是使用gawk多字符RS

awk -v RS='}}}|{{{' 'NF' inputfile

      How
      R
      U

 Hi

您可以使用pipe这样的sed -r 's/^ +//g'命令来删除行开头的额外空格。

答案 1 :(得分:0)

通过使用正则表达式,这变得很棘手,主要是因为grepawk似乎不支持lookahead

要仅提取或匹配大括号内的文本,可以使用此正则表达式:https://regex101.com/r/ASFIFa/1

[^{\}]+(?=})

因此,您可以尝试ag - The Silver Searcher,这样会产生您所需的输出:

$ ag -o '[^{\}]+(?=})' input.txt 

删除前导空格:

$ ag -o '[^{\}]+(?=})' input.txt | sed 's/^ *//'

答案 2 :(得分:0)

使用sed

sed '/{{{/!d;:A;/\}\}\}/!{N;bA};s/{{{//;s/}}}//;s/ *//g' infile

或者

sed -E '/\{{3}/!d;:A;/\}{3}/!{N;bA};s/\{{3}| *|\}{3}//g' infile