2017-10-19 4 views
2

MAC 주소를 sed로 구문 분석하려고하는데 설명 할 수없는 부분이 있습니다.sed 및 구문 분석 MAC 주소

다음은이 예있다 - 좋은 잘못된 : - 제대로 문자열 구문 분석 반환

# echo "tadam" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/' 
tadam 

첫 번째 예는 잘 작동 :

좋은 :

# echo "01:23:45:67:89:ab" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/' 
01_23_45_67_89_ab 

잘못된 . 그러나 두 번째 설명하는 방법? 왜이 문자열이 te regexp와 일치하지 않는 동안 sed가 임의의 문자열 (tadam)을 반환하고 있습니까?

누구나 설명 할 수 있습니까? regexp가 문자열과 일치하지 않을 때 sed가 아무 것도 반환하지 않는 상황을 얻고 싶습니다. 그것을하는 방법?

답변

2

sed의 기본 설정은 전체 패턴 공간을 인쇄하는 것입니다.

추가 옵션 -n (패턴 공간의 인쇄를 억제)과 추가 명령 p (현재 패턴 공간을 인쇄) : 뭔가를 교체 할 수 있다면 이제 나오지

echo "..." | sed -r -n 's/.../.../p' 

은 패턴 영역을 인쇄합니다.