sed:在 FQDN 之后从 dot 中删除所有内容

Ame*_*mey 3 sed regular-expression

我是新手,sed并且在使它工作时遇到了一些麻烦。

我想要的是这个:

abc.ztx.com. A 132.123.12.44 ---> abc.ztx.com
Run Code Online (Sandbox Code Playgroud)

我使用了以下模式,但似乎不起作用:

echo "abc.ztx.com. A 132.123.12.44" | sed 's/\.\s.+//g'
Run Code Online (Sandbox Code Playgroud)

我使用 regex101.com 和模式验证了正则表达式,完美\.\s.+匹配部分. A 132.123.12.44。为什么它不能与sed.

感谢你的帮助。谢谢你。

Kus*_*nda 5

sed默认情况下使用 POSIX 基本正则表达式 (BRE)。 \s是一个 PCRE(与 Perl 兼容的正则表达式),它相当于 BRE [[:blank:]](我认为,匹配空格和制表符,或者[[:space:]]匹配更大的空白字符集)。的+是一POSIX扩展正则表达式(ERE)改性剂,这相当于\{1,\}作为BRE。

所以试试

sed 's/\.[[:blank:]].*//'
Run Code Online (Sandbox Code Playgroud)

反而。[[:blank:]]如果不需要匹配制表符,可以用空格字符替换:

sed 's/\. .*//'
Run Code Online (Sandbox Code Playgroud)

请注意,无需使用g标志进行替换,因为只会有一个匹配项。此外,.+您使用的 可以替换为.*而不是.\{1,\}因为我们根本不关心是否还有其他字符(只需删除所有字符)。

有关的: