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

POSIXly:

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

答案3

我找到了使用 perl substring 函数的解决方案

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

正确返回

leng-006

我已经从位置 5 中删除了 5 个坏字符,包括 -

相关内容