我正在尝试从带有 #@ 和 #@@ 等标记的文本块中提取一些信息。将下面的命令与示例文件一起使用是可行的,但是当尝试将其与 -e 链接时,它不会按预期工作。
当前命令(不理想)
sed -n "/^#@/,/#@@/p" file | sed 's/[#@]*//'
重新设计的命令(不起作用)
sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file
所需输出
text title
text line
text line
文件格式
#
#
#@ text title
# text line
# text line
#@@
#
我做错了什么?
答案1
命令
sed -en "/^#@/,/#@@/p" -e 's/[#@]*//' file
可能会出错,因为-en
尝试将表达式应用于n
file /^#@/,/#@@/p
。如果要-e
与其他选项组合,则必须将表达式参数放在-e
like后面-ne "/^#@/,/#@@/p"
或将它们完全分开,如-n -e "/^#@/,/#@@/p"
不过,您似乎想应用替代命令到指定的行和然后打印它们,这实际上是一个表达式:
$ sed -n '/^#@/,/#@@/s/^#@*//p' file
text title
text line
text line
要删除前导空格:
$ sed -n '/^#@/,/#@@/s/^#[@ ]*//p' file
text title
text line
text line