如果我有文字:
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