首页 > 解决方案 > 如何使用可能有新行的输入每 n 个字符插入一个模式?

问题描述

我正在尝试使用 sed 每 2000 个字符将模式插入文件中。我正在使用这个 sed 命令,但是如果文件中有多行,它就不起作用,因为计数会在每一个新行上重置。

图案:' || '

sed "s/.\{2000\}/&'\n || '/g" file

如何使此命令与可能有也可能没有新行的输入一起工作?我可以接受非 sed 解决方案。

这是一个示例,每 4 个字符而不是 2000 个字符插入一次模式。

示例输入:

aaaaaa
bbbbbb

示例输出:

aaaa'
 || 'aa
b'
 || 'bbbb'
 || 'b
  1. 计算 4 个字符(4 个 a),插入模式。
  2. 计数 4 个字符(2 个 a、换行符和 1 个 b),插入模式。
  3. 计算 4 个字符(4 个 b),插入模式。
  4. 仅剩 1 个字符 (1 b)

谢谢。

标签: bashperlawksed

解决方案


perl -0777pe "s/(.{2000})/\$1'\n || '/gs" file

  • -0777将整个文件作为一行处理
  • \$1允许引用捕获组 w/o shell 使其为空,因为我必须使用双引号
  • s///gs用于g重复多次,并s确保.{4}可以跨越换行符。
$ printf "aaaaaa\nbbbbbb\n" | perl -0777pe "s/(.{4})/\$1'\n || '/gs"
啊啊啊
 || 啊啊
b'
 || 'bbbb'
 || 'b

推荐阅读