こんにちは。次の数千行のテキストファイルがあります。
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()
オフセット9から長さ4のテキストをPerlの大文字に置き換えますP
。次に、このfold
ユーティリティを使用して行を5文字に縮小します。出力の末尾に改行文字がありません。
答え2
以下は短いシェルスクリプトです:
#!/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