如果我有文字:
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?
您可以使用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" 如果找到,打印第一个匹配组和最后一个换行符。稍微适应您的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)