次の入力を含むファイルがあります。ドットで区切られた数字はアドレスを表します。住所のすべての数字は、以下のように1つ以上の数字にすることができます。
[112.112.112.112;3.3.3.3;44.44.44.44]
[6.6.6.6;17.17.17.17;88.88.88.88]
セミコロンと括弧なしで各アドレスを抽出し(アドレスはセミコロンで区切られます;
)、新しいファイルの1行に各アドレスを挿入して次の出力を生成したいと思います。
112.112.112.112
3.3.3.3
44.44.44.44
6.6.6.6
17.17.17.17
88.88.88.88
最初のステップとして、次のようにアドレスを抽出するためにgrepを試みます。
grep -E '\d+\.\d+\.\d+\.\d+' myfile.txt > newfile.txt
しかし、何も印刷されません。
ベストアンサー1
拡張正規表現(-E
またはegrep
)わかりません\d
。-P
@Alexanderが提案したように-E
or[0-9]
を使用してください[[:digit:]]
。
-o
完全一致行ではなく一致のみを選択するように追加されました。また、個々の一致を新しい行に分割します。
grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' myfile.txt
または
grep -Eo '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+' myfile.txt
使用パール正規表現(-P
またはpgrep
):
grep -Po '\d+\.\d+\.\d+\.\d+' myfile.txt
+
次のように変更しても*
機能します。基本正規表現:
grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' myfile.txt