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

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

如果我有文字:

aaaaaaaaa
#some info
other rows
end row#
another info

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

some info
other rows
end row

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

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n -e '/\#/,/\#/p'

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

答案1

您可以使用perl

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

解释:

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

答案2

稍微适应你的sed一个衬垫:

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n '/^#/,/#$/ {s/#//;p;}'

输出:

some info
other rows
end row

相关内容