【问题标题】:Remove newlines in some lines删除某些行中的换行符
【发布时间】:2014-09-26 03:43:44
【问题描述】:

我有一个看起来像这样的文件:

http://pastebin.com/a5Trnmyc

如何删除“colaboracion\d+”和“organismo:”之间的换行符?它应该是这样的:

colaboracion1: - 3 a�os (2003-2006) adjunto al coordinador del �rea de Inform�tica de la Agencia Nacional de Evaluaci�n y Prospectiva (ANEP).- Experto evaluador y revisor de proyectos para la Comisi�n Europea desde 2001.- Experto evaluador de agencias de evaluaci�n de Argentina, Chile, Israel, Francia y de varios organismos auton�micos (Galicia, Castilla y Le�n, Andaluc�a, Murcia).- A nivel nacional es evaluador habitual de ANECA y ANEP (proyectos del Plan Nacional I+D+i, Torres Quevedo, Estudios y An�lisis, etc.).

如您所见,换行符已被删除。

我正在尝试使用 sed 或 awk。有什么办法吗?

这不是一个重复的问题,因为这个问题在行中包含特殊字符。例如,它包含的破折号可能会一直改变以解析它。

谢谢!

【问题讨论】:

  • 这不是一个重复的问题,因为这个问题在行中包含特殊字符。例如,它包含的破折号可能会一直改变以解析它。
  • 你用其他线程的解决方案试过了吗?
  • 是的,但遗憾的是那些特殊字符真的很烦人。这就是为什么我添加了真正的输入,我认为它会比另一个更直接。
  • 新输入文件中的破折号或任何其他字符没有什么特别之处,到目前为止,您已经提出了完全相同的问题,并且可以使用与上一个问题完全相同的答案来解决(@ 987654322@).
  • @EdMorton 我可以在上一篇文章中进行重大更新,如果您认为它会更好。我认为它们是不同的案例(事实上,我认为这将是一个更长、更困难的答案)。

标签: bash awk sed formatting sh


【解决方案1】:
awk '{ sub(/[ \t\r]+$/, ""); sub(/^[ \t]+/, "") } !NF { next } /^[^[:space:]]+:/ { if (length(t)) print t; t = $0; next } { t = t $0 } END { if (length(t)) print t }' file

输出:http://pastebin.com/mdx5uw98

【讨论】:

    【解决方案2】:

    konsolebox 的答案中窃取正则表达式位,这也应该有效:

    awk '{if($0 !~ /^[^[:space:]]+:/ && NF) printf $0 " "; else print}' file
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2018-11-11
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多