특정 형식의 숫자와 문자로 구성된 여러 길이의 단어에서 특정 문자를 바꾸는 방법은 무엇입니까?

특정 형식의 숫자와 문자로 구성된 여러 길이의 단어에서 특정 문자를 바꾸는 방법은 무엇입니까?

파일이 있는데 그 안에 있는 다음 형식의 모든 코드를 변경하고 싶습니다.n{,3}L{,2}n{,5} where n= [0-9] any number and L [a-zA-Z] any letter either capital or not

다음과 같이 A 또는 a를 AB로, d 또는 D를 DK로 변경하고 싶습니다.

 Annnnn--> ABnnnnn ; Dnnn-->DKnnn 

파일은 다음과 같습니다:

$ cat filename
123a67,64,xx
A67990,12,ttt
89d7,34,ggg
234AB445,78,ooo
145aB7699,67,rrr
278Dk89,25,ppp

다음 sed 스크립트를 시도했습니다

sed 's/[aA]/AB/g;s/[dD]/DK/g' filename

A 또는 D인 인스턴스에만 작동하지만 이미 AB 또는 DK인 인스턴스의 경우 문자를 에 추가합니다 AB--> ABB or DK-->DKK. 도움과 설명을 부탁드립니다. 감사해요!

답변1

스크립트의 문제점 A은 or 를 and 로 a바꾸 므로 기존 or 는 영향을 받지 않습니다 . 선택사항 또는 사용 (앞에 0개 또는 1개의 문자)을 배치하여 해당 문자가 발생할 때 해당 문자도 대체할 수 있습니다.ABDdDKBKsed[bB][kK]?

[aA]또는 etc 다음에 숫자가 올 때만 교체가 발생하도록 하려면 [aA][bB]패턴에 숫자를 추가한 다음 및를 ()사용하여 교체에 다시 추가할 수 있습니다.\1

sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename

나는 문자 클래스를 사용하는 대신 -rERE(Escape가 필요 없음 ?) 및 대/소문자를 구분하지 않는 검색을 사용하는 데 익숙합니다.I

관련 정보