파일이 있는데 그 안에 있는 다음 형식의 모든 코드를 변경하고 싶습니다.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개의 문자)을 배치하여 해당 문자가 발생할 때 해당 문자도 대체할 수 있습니다.AB
D
d
DK
B
K
sed
[bB]
[kK]
?
[aA]
또는 etc 다음에 숫자가 올 때만 교체가 발생하도록 하려면 [aA][bB]
패턴에 숫자를 추가한 다음 및를 ()
사용하여 교체에 다시 추가할 수 있습니다.\1
sed -r 's/ab?([0-9])/AB\1/Ig;s/dk?([0-9])/DK\1/Ig' filename
나는 문자 클래스를 사용하는 대신 -r
ERE(Escape가 필요 없음 ?
) 및 대/소문자를 구분하지 않는 검색을 사용하는 데 익숙합니다.I