vi sed 或 awk。文本文件中的每一行。替换从位置 75 开始的 9 个字符

vi sed or awk. every line in a text file. replace 9 characters starting at position 75

我有一个大文件 从第 3 行到末尾(#lines in file -1 ) 从行中的字符位置 75 开始。我需要将字符串更改为 123456789。

思想建议?我不能让每行的现有字符不重复,所以我无法搜索它。

隐藏 pii 数据的乐趣

让我们考虑这个测试文件:

$ cat testfile 
.........-.........-.........-.........-.........-.........-.........-....ReplaceMeKeep
.........-.........-.........-.........-.........-.........-.........-....OldData..Keep

使用 sed

这会将第 75 列开始的九个字符替换为 123456789:

$ sed -E 's/(.{74}).{0,9}/23456789/' testfile
.........-.........-.........-.........-.........-.........-.........-....123456789Keep
.........-.........-.........-.........-.........-.........-.........-....123456789Keep

使用 awk

这会将新字符串替换为从位置 75 开始的前九个字符:

$ awk '{print substr([=12=],1,74) "123456789" substr([=12=],75+9)}' testfile
.........-.........-.........-.........-.........-.........-.........-....123456789Keep
.........-.........-.........-.........-.........-.........-.........-....123456789Keep

vim中,您可以这样做:

%s/\(^.\{75\}\)\@<=........./1234567890/g

这基本上会进行 75 个字符的后视(从行首开始),并用您的字符串替换该行的其余部分。