您好,我有一个包含数千行的文本文件,如下所示:
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