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

sed기본적으로 POSIX 기본 정규식(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

관련 정보