sed를 사용하여 텍스트 추출이 예상대로 작동하지 않습니다.

sed를 사용하여 텍스트 추출이 예상대로 작동하지 않습니다.

방금 사용하기 시작했고 출력에서 ​​IP 주소를 추출하는 데 sed사용할 계획입니다 . ping이것이 내가 달성하고 싶은 것입니다:

텍스트 입력:

ytmti (192.188.2.3) jjggy

원하는 출력:

192.188.2.3

내가 시도하는 명령은 다음과 같습니다.

echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:' 

현재 출력:

ytmti 192.188.2.3 jjggy

참고: ytmtiand는 실제로 jjggyand와 같은 텍스트를 대체합니다.Pinging unix.stackexchange.comwith 32 bytes of data:

내 생각에는 을 사용하는 것이 awk출력을 구문 분석하는 데 더 나은 솔루션일 수 있지만 ping익숙해지고 싶습니다 sed.

답변1

바꾸기 명령은 첫 번째 부분에서 일치하는 모든 문자를 두 번째 부분의 모든 문자로 바꾸 므로 저장하려는 부분만 sed필요하거나 유사하게 그룹화합니다. 예를 들면 다음과 같습니다..*

echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'

[^)]*IP를 하드코딩하고 일반화하는 것을 방지하기 위해 이것을 사용한다는 점에 유의하세요 . 그것은 다음을 생산합니다 :

192.188.2.3

답변2

다음에서 필드 구분 변수를 사용하십시오 awk.

echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'                                                                                              
192.188.2.3

답변3

다음과 같이 할 수도 있습니다.

echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'

관련 정보