2017-11-10 5 views
1

사이의 공백을 제거, 나는이 같은 표기법으로 여러 파일을 가지고 그들이 될 수 있도록Sed의 디렉토리에서 단어와 세미콜론

myKey : 
mySecondKey : 
blabla : 

내가, 세미콜론 전에 공백을 제거하고 싶습니다 :

myKey: 
mySecondKey: 
blabla: 

내가 시도 :

sed -e 's/([a-z]*) :/\1:/g' . 

그러나 내가 갖는 :

": \1 not defined in the RE 

는 또한 시도 :

sed -e 's/([a-z]*)\ \:/\1\:/g' 

이 오류는 그러나 변경되지 않습니다.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까?

정규식은 어떻게 잘못 되었습니까?

변수를 올바르게 정의하지 않습니까?

+1

그룹 괄호로 교체하면 확장 된 정규식 옵션을 사용하지 않을 경우 이스케이프 할 필요가'-r', 변화'의/([AZ] *)/\ 1 :/g ''~/([az] * \) :/\ 1 :/g " – etopylight

답변

1

이유는 단순히 :

sed -e 's/ :/:/g' 

무감각 경우 사용

sed -e 's/([a-z]*) :/\1:/ig' 

또는

sed -e 's/([a-zA-Z]*) :/\1:/g' 
+0

그게 좋은 지적이지만 파일이 상당히 길어서 다른 구성 요소를 망칠 까봐 두렵습니다. – octavian

1

당신은 당신의 성격을 정의 할 필요가있다, 그래서 당신은, 하부 및 상부 케이스 문자가를 수업 유형 :

sed -E 's/^([a-zA-Z]+)\ :/\1:/g' 
#    -^- 

는 또한 주어진 예제를 산출한다 (여기 ^) 앵커 사용

myKey: 
mySecondKey: 
blabla: 
1

은 단순히 단어 사이의 모든 공간 (\s*)를 발견하여 공백을 제거 할 수 있습니다 (예를 들어, "있는 MyKey")와 ::

sed -i 's/\s*:/:/g' .