sed: FQDN 뒤의 점 뒤의 모든 항목을 제거합니다.

sed: FQDN 뒤의 점 뒤의 모든 항목을 제거합니다.

나는 이것에 익숙하지 sed않고 그것을 작동시키는 데 약간의 문제가 있습니다.

내가 원하는 것은 이것이다:

abc.ztx.com. A 132.123.12.44 ---> abc.ztx.com

다음 패턴을 사용했지만 작동하지 않는 것 같습니다.

echo "abc.ztx.com. A 132.123.12.44" | sed 's/\.\s.+//g'

regex101.com을 사용하여 정규식을 확인했는데 패턴이 \.\s.+해당 부분 과 . A 132.123.12.44완벽하게 일치했습니다. 왜 작동하지 않습니까 sed?

도움을 주셔서 감사합니다. 감사해요.

답변1

sedPOSIX 기본 정규식(BRE)이 기본적으로 사용됩니다. \sBRE와 동등한 PCRE(Perl 호환 정규 표현식)입니다 [[:blank:]](공백과 탭 또는 [[:space:]]더 큰 공백 문자 세트와 일치한다고 생각합니다). BRE +와 동등한 POSIX 확장 정규식(ERE) 수정자 입니다 \{1,\}.

그러니 시도해 보세요

sed 's/\.[[:blank:]].*//'

대신에. [[:blank:]]탭 문자를 일치시킬 필요가 없으면 공백 문자로 바꿀 수 있습니다.

sed 's/\. .*//'

g일치하는 항목은 하나만 있으므로 대체를 위해 플래그를 사용할 필요가 없습니다 . 또한 다른 문자가 있는지 전혀 신경 쓰지 않기 때문에 .+사용한 것을 .*대신 대체할 수 있습니다(모두 제거하기만 하면 됩니다)..\{1,\}

관련된:

답변2

Gnu/Linux나 다른 Gnu를 사용한다면 Gnu sed를 갖게 될 것입니다. Gnu sed에는 -r이를 허용하는 옵션이 있습니다.

-r정규식 방언을 변경하는 옵션이 추가되었습니다.

예를 들어

echo "abc.ztx.com. A 132.123.12.44" | sed -r 's/\.\s.+//g'

답변3

귀하의 질문은 구체적으로 요청되었지만 구현에 sed사용하겠습니다 .cut

후행점을 수락할 수 있는 경우 다음을 수행하세요.

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1

abc.ztx.com.

후행 점을 참을 수 없다면 다음을 수행하십시오.

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | rev | cut -d. -f2- | rev

abc.ztx.com

또는:

$ echo "abc.ztx.com. A 132.123.12.44" | cut -d" " -f1 | sed -e "s/\.$//"

abc.ztx.com

답변4

또 다른 가능성은 을 사용하고 awk필드 .구분 기호로 (마침표 + 공백)을 지정하는 것입니다.

echo "abc.ztx.com. A 132.123.12.44" | awk -F '\\. ' '{print $1}'

abc.ztx.com

관련 정보