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

时间:2015-11-09 23:11:45

标签: vim awk sed vi

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

思考建议?我不能将每行的现有字符重复,因此我无法对其进行搜索。

隐藏pii数据的乐趣

2 个答案:

答案 0 :(得分:3)

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

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

使用sed

这将使用123456789替换以第75列开头的九个字符:

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

使用awk

这会将新字符串放在从第75位开始的前九个字符的位置:

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

答案 1 :(得分:3)

vim 中,您可以这样做:

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

它基本上有75个字符的lookbehind(从行的开头开始),并用你的字符串替换该行的其余部分。