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)。 \s是一個PCRE(Perl相容的正規表示式),它相當於BRE [[:blank:]](我認為,匹配空格和製表符,或[[:space:]]匹配更大的空白字元集)。是+POSIX 擴充正規表示式 (ERE) 修飾符,相當於\{1,\}BRE。

所以嘗試一下

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

相關內容