Sed:如果没有跟随点,则删除数字。如果线不以点结尾,则返回线。

时间:2018-01-28 19:52:16

标签: regex bash perl sed

我想删除未跟随点的初始数字(.) 如果该行不以点(\n)结尾,则删除换行符(.)。

这是示例文本:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus 
pellentesque, suscipit ac nunc. Etiam lobortis, massa ac aliquam auctor, augue nisl 
53sagittis urna, at dapibus tellus erat ullamcorper ligula. 
Praesent orci dui, pulvinar id convallis a, faucibus non mauris.

2.Cras vitae tortor purus
5. ut tincidunt mauris. Sed at velit nisl.
8. Donec eu mauris tortor, interdum condimentum erat

65Donec tellus augue, tempus sed facilisis sed, fringilla quis leo. Mauris vulputate, leo
ac facilisis vulputate, enim orci interdum augue, in blandit quam turpis
quis dui. Morbi dictum luctus velit nec faucibus.

我想要的输出:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus pellentesque, suscipit ac nunc. Etiam lobortis, massa ac aliquam auctor, augue nisl sagittis urna, at dapibus tellus erat ullamcorper ligula. 
Praesent orci dui, pulvinar id convallis a, faucibus non mauris.

2.Cras vitae tortor purus
5. ut tincidunt mauris. Sed at velit nisl.
8. Donec eu mauris tortor, interdum condimentum erat

Donec tellus augue, tempus sed facilisis sed, fringilla quis leo. Mauris vulputate, leo ac facilisis vulputate, enim orci interdum augue, in blandit quam turpis quis dui. Morbi dictum luctus velit nec faucibus.

2 个答案:

答案 0 :(得分:2)

您的示例与您的说明不符。在您的示例输出中(与您的说明相反),如果符合以下条件,则不会移除\n

  • 该行为空
  • 该行以数字+点(例如2.Cras vitae tortor purus
  • 开头
  • 该行以点+空格结尾(例如... ligula. \n

这个perl代码实现了这些要求:

perl -pe 'next if /^\d+\./; s/^\d+//; chomp if /\S/ && !/\.\s*$/'

  • 如果行以数字+点开头则不执行任何操作,否则:
  • 删除前导数字
  • 如果该行包含至少一个非空白字符且不以点+可选空格结尾,则删除尾随换行符

答案 1 :(得分:1)

你可能想要的(非常可怕的)sed是:

sed -re ':a;N;$!ba;s/[[:digit:]]+([^.])/\1/g;s/([^.])\n/\1/g' file.txt

(将整个文件视为一个流,将一个或多个数字替换为' not-a-dot'使用' not-a-dot',然后替换所有& #39; not-a-dot'其次是换行符,其中包含' not-a-dot'匹配。

然而,当它符合您的要求时,由于多个空白行,并且某些列表项末尾缺少点,因此它会根据您的要求输出略有不同的结果 - 因此您可能需要重新考虑您的方法:< / p>

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla ac tellus nunc. Phasellus pellentesque, suscipit ac nunc. Etiam lobortis, massa ac aliquam auctor, augue nisl sagittis urna, at dapibus tellus erat ullamcorper ligula. Praesent orci dui, pulvinar id convallis a, faucibus non mauris.
2.Cras vitae tortor purus5. ut tincidunt mauris. Sed at velit nisl.
8. Donec eu mauris tortor, interdum condimentum erat
Donec tellus augue, tempus sed facilisis sed, fringilla quis leo. Mauris vulputate, leoac facilisis vulputate, enim orci interdum augue, in blandit quam turpisquis dui. Morbi dictum luctus velit nec faucibus.