【问题标题】:How do I force lines to be a certain length?如何强制线条为一定长度?
【发布时间】:2017-01-15 07:11:10
【问题描述】:

我有一个文本文件,其中包含一个非常大的 5 位数字列表。有些行包含多个 5 位数字,没有换行符分隔它们

12345
23456
34567
4567856789
67890
...
837460174975917
...

我正在尝试找到一个可以与 sed 一起使用的正则表达式,它将在数字之间添加换行符。

期望的输出是:

12345
23456
34567
45678
56789
67890
...
83746
01749
75917
...

我已经玩了一点,但我能想到的最好的方法是将 ^([0-9]{5}) 替换为 $1/r/n。但是,这会在每个数字后添加一个换行符,并且我需要在之后删除所有空行,由于此文件的大小,这不是最佳的。

【问题讨论】:

  • 那么,sed 还是 Notepad++?在 NPP 中,您可以尝试 ^([0-9]{5})\B 并替换为 $1\r\n$2
  • 我将使用 sed,因为文件对于 notepad++ 来说太大了。解决方案可以是或者,因为我只是在寻找一个可以满足我需求的正则表达式。
  • sed 不支持将 Boost 正则表达式风格作为 NPP。试试sed -E "s/^([0-9]{5})(.)/\1\r\n\2/g"

标签: regex text replace sed


【解决方案1】:

使用fold 的轻量级解决方案:

示例输入:

cat filename
12345
23456
34567
4567856789

使用折叠的解决方案:

cat filename|fold -w5
12345
23456
34567
45678
56789

更新(根据 Kenavoz 的建议):避免不必要地使用 catpipe

fold -w5 filename 

【讨论】:

  • fold -w5 filename 避免使用管道。
【解决方案2】:

使用grep -o 你可以这样做:

grep -Eo '.{5}' file

12345
23456
34567
45678
56789
67890
83746
01749
75917

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多