如何正确链接多个 sed 命令

如何正确链接多个 sed 命令

我正在尝试从带有 #@ 和 #@@ 等标记的文本块中提取一些信息。将下面的命令与示例文件一起使用是可行的,但是当尝试将其与 -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尝试将表达式应用于nfile /^#@/,/#@@/p。如果要-e与其他选项组合,则必须将表达式参数放在-elike后面-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

相关内容