2013-04-23 2 views
2

하나의 awk와 하나의 sed 예제가 있습니다. 둘 다 동일한 정규 표현식을 사용하는 것 같지만 결과는 다릅니다. 따라서 패턴 확장이 달라져야합니다. 그러나 나는 차이를 얻을 수 없다. 아무도 설명 할 수 있을까요?sed와 awk 정규 표현식의 차이점

$ echo "THE BEAR ATE THE FISH" |sed -e 's/[^ ]*(H|F)[^ ]*/<red>&/g' 
THE BEAR ATE THE FISH 
$ echo "THE BEAR ATE THE FISH" | awk 'gsub(/[^ ]*(H|F)[^ ]*/,"<red>&")' 
<red>THE BEAR ATE <red>THE <red>FISH 
$ sed --version 
GNU sed version 4.1.5 
$ awk --version 
GNU Awk 3.1.5 
+0

'(H | F)'대신에'sed '처럼 보이지만'[HF]'는 같은 결과를냅니다. – abasu

답변

7

당신은 확장 정규 표현식 클래스의 일부입니다 귀하의 정규 표현식에 교대 |을 사용하고 있습니다. 차이는 sed(그리고 grep) 당신이 GNU sed으로 -r 플래그를 제공하여 확장 된 정규 표현식을 사용하고자 할 때 명시 할 필요가로하고는 -EGNU grep과 : 다른 방법

$ echo "THE BEAR ATE THE FISH" | sed -re 's/[^ ]*(H|F)[^ ]*/<red>&/g' 
<red>THE BEAR ATE <red>THE <red>FISH 

당신은 확장 정규 표현식을 탈출 할 수 특징 :

: 더 나은

$ echo "THE BEAR ATE THE FISH" |sed -e 's/[^ ]*\(H\|F\)[^ ]*/<red>&/g' 
<red>THE BEAR ATE <red>THE <red>FISH 

아직 여기에 문자 클래스를 사용할 수 있습니다

세 도구의 설명서 페이지에는 정규식과 함께 사용되는 부분이 설명되어 있습니다.