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개의 잘못된 문자를 제거했습니다.

관련 정보