awk, sed, perl: 特定の位置の文字のみを削除

awk, sed, perl: 特定の位置の文字のみを削除

名前を変更するファイルが複数あります。

    leng-1494-001
    leng-1464-002
    leng-2414-004
    leng-7894-005
    leng-1323-006

名前を変更したい

    ferr-1494-001
    ferr-1464-002
    ferr-2414-004
    ferr-7894-005
    ferr-1323-006

ferrとlengを処理する方法を知っていますが、sedを使用して6〜10文字(1464,7894)を空の行やaaaa bbbb ccccなどの文字列に置き換える方法は? AwkまたはPerlソリューションも歓迎します。ありがとう

答え1

sedを使用してください:

sed -r 's/(.*[a-zA-Z]{4}\-)([0-9]{4})/\1aaaa/g'

答え2

POSIX的に:

$ sed -e 's/-[^-]*-/-/' file
    leng-001
    leng-002
    leng-004
    leng-005
    leng-006

答え3

Perl部分文字列関数を使用して解決策を見つけました。

echo     leng-1323-006|perl -lpe 'substr($_, 5, 5) = "";'

正しく返す

leng-006

次のような場所5から5つの無効な文字を削除しました。

関連情報