提取两个字符之间的文本(多行输入)

tam*_*doz 5 sed

如果我有文字:

aaaaaaaaa
#some info
other rows
end row#
another info
Run Code Online (Sandbox Code Playgroud)

我怎么能只提取只#获取字符之间的文本:

some info
other rows
end row
Run Code Online (Sandbox Code Playgroud)

我正在以sed这种方式尝试:

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n -e '/\#/,/\#/p'
Run Code Online (Sandbox Code Playgroud)

但它也给了我性格#。有没有办法删除#using sed

pLu*_*umo 5

您可以使用perl

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |\
perl -0777 -ne '/#([^#]*)#/ && print $1,"\n"; '
Run Code Online (Sandbox Code Playgroud)

解释:

  • -0777 将整个文件作为一行(启用多行匹配)
  • /#([^#]*)#/匹配[^#]too#和括号之间的非#字符将其添加为第一个匹配组。
  • && print $1,"\n" 如果找到,打印第一个匹配组和最后一个换行符。


Rud*_*diC 5

稍微适应您的sed一个班轮:

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n '/^#/,/#$/ {s/#//;p;}'
Run Code Online (Sandbox Code Playgroud)

输出:

some info
other rows
end row
Run Code Online (Sandbox Code Playgroud)