sed或egrep正则表达式多行

sed或egrep正则表达式多行,sed,grep,Sed,Grep,我有一个像这样的LaTeX文件: \usepackage[colorlinks, citecolor=black, urlcolor=black ] {hyperref} \usepackage{ngerman} hyperref:colorlinks,citecolor=black,urlcolor=black ngerman: 我必须这样输出它: \usepackage[colorlinks, citecolor=black, urlcolor=b

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

\usepackage[colorlinks,
citecolor=black,
          urlcolor=black
]
{hyperref}
\usepackage{ngerman}
hyperref:colorlinks,citecolor=black,urlcolor=black
ngerman:
我必须这样输出它:

\usepackage[colorlinks,
citecolor=black,
          urlcolor=black
]
{hyperref}
\usepackage{ngerman}
hyperref:colorlinks,citecolor=black,urlcolor=black
ngerman:
我可能只使用sed和egrep,而不是awk和perl。
如何执行此操作?

您可以将
sed
命令导入其他
sed
命令,以使用分层方法

  • 删除换行符
  • 将}转换为}\n
  • \usepackage[optional]{packagename}
    转换为
    packagename:[可选]
  • 删除空格和括号
  • 以下是脚本:

    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:
    

    第一个命令是逐字从中获取的。其中一些命令可以组合使用,但我发现当每个步骤都有单独的命令时,更容易理解。如果您的latex文件很小,那么时间应该不是问题。

    为什么只能使用sed和egrep?这是家庭作业问题吗?我试过这个:sed-e'$!Ns#\,\n#\,#'tmp.tex | sed-e的/\\usepackage([[](.]]])*{(.*)}/\3:\2/g'它与第二个匹配,但与多行上的不匹配。我认为第一个sed是错误的…我认为我必须删除所有新行,直到第一个“}”;s/\n/'tmp.tex,但这一个只删除第二行换行符。是的,sed only当然可以做到这一点,但您需要更明确地进行所需的转换。示例:为什么urlcolor不再在输出中