私たちの会社で利用可能なホスト名のリストがあります。
たとえば、
- グースワスト03
- gkjbossp1
- frdwop04
数字の前の最後の文字は、t
ホストp
環境q
を表します。すべての文字列は数字で終わります。
t
試験用p
製品のq
品質保証のため
ホスト名と数字につながる文字を取得するには正規表現が必要です。 (ファイルにすべてリストするのではなく、単一の文字列に対する解決策が必要です。)
たとえば、
クバスティー03
この文字列では文字だけを抽出したいと思いますt
。
よろしくお願いします。
ベストアンサー1
grep
私は質問にandとタグ付けしたので、文字列リストがいくつかのsed
テキスト入力の1行に1つの項目として表示されるとします。
それから:
sed -n 's/^.*\([^[:digit:]]\)[[:digit:]]\{1,\}$/\1/p' < that-input
または(GNUgrep
または互換ビルドにPerlと同様の正規表現サポートがあると仮定):
grep -Po '\D(?=\d+$)' < that-input
数字以外の文字で終わる行の末尾の数字の前に数字以外の文字を出力し、その後に1つ以上の数字が続きます。
どちらもマッチングに正規表現を使用しますが、デフォルトの正規表現とsed
Perlgrep -P
に似た正規表現を使用します。
一部のsed
実装では-P
これをサポートしていますが、最も一般的ではありません。-E
正規表現の別の方言である拡張正規表現のさまざまなサポート。そしてそれら:
sed -E -n 's/^.*([^[:digit:]])[[:digit:]]+$/\1/p' < that-input
あるいは、単独perl
で使用することもできます:
perl -lne 'print $1 if /(\D)\d+$/' < that-input
(perl
デフォルトでは文字レベルではなくバイトレベルで動作します。入力をUTF-8文字として解釈するか、通常どおりロケールエンコーディングに従って入力/出力をデコード/エンコードするように指示する-C
オプションを参照してください。)-Mopen=locale
grep
sed
あるいは、libpcre(GNUによって使用されるライブラリ)に付属する実装例pcregrep
:grep
grep -P
pcregrep -o1 '(\D)\d+$' < that-input