sed或egrep正则表达式多行

时间:2013-12-02 19:47:55

标签: sed grep

我有一个像这样的LaTeX文件:

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

我必须这样输出:

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

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

1 个答案:

答案 0 :(得分:0)

您可以将sed命令传递到其他sed命令以使用分层方法。

  1. 删除换行符
  2. 转换为} \ n
  3. \usepackage[optional]{packagename}转换为packagename:[optional]
  4. 删除空格和括号
  5. 这是脚本:

    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 front of a pattern?逐字记录的。其中一些命令可以组合使用,但是当每个步骤都有一个单独的命令时,我发现它更容易理解。如果你的乳胶文件很小,时间应该不是问题。