如何在文件中固定数量的字符后插入换行符
Posted
技术标签:
【中文标题】如何在文件中固定数量的字符后插入换行符【英文标题】:How to insert a new line character after a fixed number of characters in a file 【发布时间】:2010-11-14 07:08:26 【问题描述】:我正在寻找一个 bash 或 sed 脚本(最好是单行),我可以使用它在巨大的文本文件中的固定数量的字符之后插入一个换行符。
【问题讨论】:
***.com/questions/525592/… 的骗子还有很多很多 我不同意这里的欺骗评论,尼尔:这不是一个简单的搜索和替换,就像你链接中的问题一样...... 【参考方案1】:因为我不能直接评论(降低声誉)对上层 cmets 的新提示:
我更喜欢 sed 命令(正是我想要的)并且还测试了 Posix-Command fold。但是对于原始问题,两个命令之间存在一些差异: 如果您有一个包含 n*bytes 记录的平面文件(没有任何换行符)并使用 sed 命令(以字节为数字(@Kristian 的答案中为 20)),如果您有 n 行用 wc 计数。如果你使用 fold 命令,你只有 n-1 行带有 wc! 这个区别有时很重要,如果你的输入文件不包含任何换行符,你会在最后一行之后得到一个 sed 而没有一个 fold
【讨论】:
【参考方案2】:让 N 是一个 shell 变量,表示您想要换行符之后的字符数。如果您想跨行继续计数:
perl -0xff -pe 's/(.'$N')/$1\n/sg' input
如果要重新开始对每一行进行计数,请省略 -0xff 参数。
【讨论】:
【参考方案3】:这可能对你有用:
echo aaaaaaaaaaaaaaaaaaaax | sed 's/./&\n/20'
aaaaaaaaaaaaaaaaaaaa
x
【讨论】:
实际上只适用于第一行(例如,在 20 个字符后插入换行符然后退出)。不适合“巨大的文本文件”。【参考方案4】:在正好有 42 个字符的行之后添加一个空行
sed -ie '/^.\42\$/a\
' huge_text_file
【讨论】:
我认为 sed 在命令行上使用时通常没有-i
标志会更好,因为如果在编写命令时输入错误,您不会意外地用不需要的输出覆盖原始文件。我觉得答案至少应该警告人们 -i
做了什么,以防他们不熟悉 sed 并且不先检查他们使用的标志。【参考方案5】:
这样的事情怎么样? change 20 是换行符前的字符数,temp.text 是要替换的文件..
sed -e "s/.\20\/&\n/g" < temp.txt
【讨论】:
如果文件包含“~”字符则失败 这会在每 20 个字符(每行原始字符)之后插入一个换行符。如果原始文件不包含换行符,并且您只希望在前 20 个字符之后有一个换行符,请在末尾省略“g”(全局)。如果你想要这个并且原始文件包含换行符,你将不得不使用不同的解决方案。 我遇到了同样的问题,但是在 OSX 中它插入了一个“n”而不是换行符?我检查了其他有同样问题的帖子,但我不明白如何解决?请问有人吗? @JM88,Unix/Linux 使用换行符 (\n
) 换行。 Mac 使用回车符换行 (\r
),Windows 使用两者的组合 (\r\n
) 换行。将命令更改为sed -e "s/.\20\/&\r/g" < temp.txt
,你应该得到你需要的。另请参阅this Stack-O 和this blog。
许多 sed 实现将所选字符数限制为 255。更喜欢 Steven Penny 的回复。【参考方案6】:
如果您想在整个文件的多个字符之后插入换行符,例如在整个文件的第 30 个字符之后
gawk 'BEGIN FS=""; ch=30
for(i=1;i<=NF;i++)
c+=1
if (c==ch)
print ""
c=0
else
printf $i
print ""
' file
如果您的意思是在每行中插入特定数量的字符,例如在每 5 个字符之后
gawk 'BEGIN FS=""; ch=5
print substr($0,1,ch) "\n" substr($0,ch)
' file
【讨论】:
以上是关于如何在文件中固定数量的字符后插入换行符的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server VARCHAR/NVARCHAR 字符串中插入换行符