
私はこれに慣れておらず、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
BREと同等の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