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つだけなので、置換にフラグを使用する必要はありません。また、他の文字があるか全く気にしないので、使用したものを代わりに.+置き換える.*ことができます(すべて削除するだけです)。.\{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

もう1つの可能性は、を使用してawkフィールド.区切り記号として(ピリオド+スペース)を指定することです。

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

abc.ztx.com

関連情報