使用 SED 或 AWK 进行文本过滤

使用 SED 或 AWK 进行文本过滤

我的文档有以下几个方面:

Text1
\begin{code}
code1
\end{code}
Text2
\begin{code}
  -- comment1
  code1A
\end{code}
Text3

\begin{code}
  -- comment2
  code1B
\end{code}
Text4

\begin{code}
codeB
\end{code}
Text 5

我正在寻找的输出是这样的:

code1

  -- comment1
  code1A

  -- comment2
  code1B

codeB

答案1

笔记:对问题的编辑使该解决方案变得过时。


由于您只想过滤输出的特定行,因此grep可以完成这项工作。

$ grep -v -e "T[0-9]" -e '^\\begin{code}$' -e '^\\end{code}$' file.txt
code1
  -- comment1
  code1A
  -- comment2
  code1B
codeB

答案2

发布所需的输出而不指定要获取的规则/逻辑并不能真正帮助解决您的问题。有人可以只回显/打印输出而不涉及输入。假设您想要介于两者之间\begin{code}\end{code}排除其中任何一个的线条,请尝试

sed -n '/\\begin/,/\\end/ {/{code}/!p}' file
code1
  -- comment1
  code1A
  -- comment2
  code1B
codeB

如果需要空行,请附加/^ *$/psed脚本中。

编辑:就像这样:

$ sed -n '/\\begin/,/\\end/ {/{code}/!p}; /^ *$/p' file
code1
  -- comment1
  code1A

  -- comment2
  code1B

codeB

相关内容