次のように、国名とその国のモバイル国コードプレフィックスを含むファイルがあります。
United Kingdom +44 ...more fields
United States Virgin Islands +1 ...more fields
国名と携帯電話番号を知る必要があります。したがって、正規表現は次のようになります。行の先頭からすべての単語を読み、プラス記号と1つ以上の数字で始まる文字列を読み、停止します。
grep、cut、sedでもいくつか試してみましたが取得できません。
答え1
努力する:
grep -o '^[^+]*+[0-9]\+' infile
[^+]*+
最初に+
見つかり、その後に1つ以上の数字が来るまで、すべての項目と一致します。[0-9]\+
答え2
コマンドライン:
$ perl -lne 'print /^(.*?\+\d+)/' input.txt
これにより、入力から必要な情報を取得できます。
布材:
/^(.*?\+\d+)/
正規表現は、プラス記号が最初に表示されるまですべてを抽出し、その後に少なくとも1つの数字記号が続きます。BOL
これはカラットを介して接続されているため、^
明らかに1回の一致のみが発生する可能性があります。- 一致が
print
関数に渡されます。 -lne
optionsは、input.fileの各行のオプションでPerl
指定されたコードを実行するために使用されます。 Perlは特に要求しない限り何も印刷しません。-e
-n
出力:
United Kingdom +44
United States Virgin Islands +1
答え3
~からあなたは言う スペースファイルに使用される区切り記号。利用できる必要があります。
cut -d ' ' -f 1-5 filename
ファイルから最初の5列を抽出します。
与えられたデータに対して、これは次のようになります。
United Kingdom +44
United States Virgin Islands +1
...しかし、名前に2つ以上の単語がある国は(ただ2つではなく)複数の領域にまたがっているので、これは幸運であると仮定します。
sed
各行の最初の数値セットの後のすべての項目(国コードの後のすべての項目)を削除するより信頼性の高い方法:
sed 's/\([[:digit:]][[:digit:]]*\).*/\1/' filename
または、
sed 's/\([[:digit:]]\{1,\}\).*/\1/' filename
または代わりに-E
拡張正規表現を使用してください。
sed -E 's/([[:digit:]]+).*/\1/' filename