根据坐标范围替换字符

根据坐标范围替换字符

您好,我有一个包含数千行的文本文件,如下所示:

NNNNN
NNNNN
NNNNN
NNNNN

我想根据位置坐标将特定范围内的所有字母替换为另一个字母,假设我想将从范围位置 10 到位置 13 的所有 N 个字母替换为字母 P,输出将是:

NNNNN
NNNNP
PPPNN
NNNNN

关于我可以使用的命令有什么建议吗?

答案1

$ tr -d '\n' <file | perl -pe 'substr($_, 9, 4, "P"x4)' | fold -w 5
NNNNN
NNNNP
PPPNN
NNNNN

首先从输入文件的数据中删除所有换行符,然后substr()在 Perl 中使用大写 替换偏移量 9 处长度为 4 的文本P。然后使用该fold实用程序将行折叠到五个字符处。输出末尾没有换行符。

答案2

这是一个简短的 shell 脚本:

#!/bin/bash
start=10
end=13
first=$(head -n 1 file)
width=${#first}
text=$(paste -sd "" file)
mod="${text:0:start-1}$(tr N P <<<"${text:start:end-start+1}")${text:end}"
grep -Eo ".{1,$width}" <<<"$mod"
NNNNN
NNNNP
PPPNN
NNNNN

相关内容