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

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

저는 이제 막 사용을 시작했고 출력 sed에서 ​​IP 주소를 추출하는 데 사용할 예정입니다 . 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

참고: ytmti및 는 실제로 및 와 jjggy같은 텍스트를 대신합니다 .Pinging unix.stackexchange.comwith 32 bytes of data:

출력을 awk구문 분석하는 데는 를 사용하는 것이 더 나은 솔루션일 수 있다고 생각하지만 .pingsed

답변1

대체 명령은 첫 번째 섹션에서 일치하는 모든 문자를 두 번째 섹션의 모든 문자로 바꾸 므로 다음과 같이 저장할 부분만 sed필요하거나 유사하게 그룹화합니다..*

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

나는 [^)]*이를 사용하여 IP를 하드코딩하고 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.'

관련 정보