sed or egrep regex multiple line



我有一个LaTeX文件,如下所示:

usepackage[colorlinks,
citecolor=black,
          urlcolor=black
]
{hyperref}
usepackage{ngerman}

我必须这样输出:

hyperref:colorlinks,citecolor=black,urlcolor=black
ngerman:

我可能只使用sed和egrp,而不使用awk和perl。我该怎么做?

您可以将sed命令管道传输到其他sed命令中,以使用分层方法。

  1. 删除换行符
  2. 将}转换为}\n
  3. usepackage[optional]{packagename}转换为packagename:[optional]
  4. 移除空格和支架

这是脚本:

sed ':a;N;$!ba;s/n/ /g' file.latex | sed 's/}/}n/g' | sed 's/\usepackage[[:space:]]*(.+)?[[:space:]]*{(.+)}/2:1/' | sed 's/[//g;s/]//g;s/[[:space:]]//g'

结果如下:

hyperref:colorlinks,citecolor=black,urlcolor=black
ngerman:

第一个命令逐字逐句取自How to insert a newline in a pattern?。其中一些命令可以组合使用,但我发现当每个步骤都有一个单独的命令时,会更容易理解。如果你的乳胶文件很小,时间应该不是问题。

最新更新