在unix

时间:2015-07-06 16:49:04

标签: regex unix pattern-matching

我想在模式后用空格替换换行符。
例如我的文字是:
1.
好电影
(2006)
这是一部世界级的音乐电影  迪尔:
abc
 用:


cer

cro
喜剧
 |
戏剧
 |
家庭
 |
音乐作品  |
浪漫志 120分钟

53097 我希望上面的文字成为这样的东西

1.好电影(2006)
这是一部音乐剧。
导演:abc
用:lan,cer,cro
喜剧|戏剧|家庭|音乐|浪漫时刻120分钟

1 个答案:

答案 0 :(得分:1)

问题更新后,解决方案的要求发生了变化:

Checked=true

输出:

cat test.txt | tr '\n' ' '  | perl -ne 's/(?<!\|) ([A-Z])/\n\1/g; print' | sed 's/ ,/,/g' | sed 's/ \([0-9]\+\)/\n\1/g'; echo

说明:

  • 首先,我使用1. good movie (2006) This is a world class movie for music. Dir: abc With: lan, cer, cro Comedy | Drama | Family | Musical | Romance 120 mins. 替换所有换行符。
  • 其次我用前面的换行符替换每个大写字母 本身除非它前面有一个管道&#34; | &#34;符号
  • 第三个更正了逗号间距。
  • 最后一项将持续时间声明移至新行

最后的tr是添加“换行符”&#39;到输出。

<强>推荐使用:
基于kpie的评论,我建议您使用以下解决方案:

echo

我将您的输入粘贴到test.txt中 第一个cat test.txt | sed ':a;N;$!ba;s/\n//g' | sed 's/\([A-Z]\)/\n\1/g' 替换在此解释:https://stackoverflow.com/a/1252191/1863086
第二个用前一个换行符替换每个大写字母。

编辑: 使用sed的另一种可能性:

tr