SEDまたはAWKを使用してtxtファイルから特定の番号を削除する方法は?

SEDまたはAWKを使用してtxtファイルから特定の番号を削除する方法は?

私はコンピュータにどのソフトウェアもインストールできない会社に勤めていますが、そこで使用するWindowsは不便です。

イントラネットからコピーした多くのテキストを整理してtxtファイルとして保存する必要があります。だから私はsedawkのオンラインライブエディタを使用する必要があります。これまたはこれ

この言葉はこうです。

01

010010-26.2010.501.0026  fafas fasdf asdf asdfsadf asdfasd fasd asasdff

fdfsadf adsf adsf asdf asdfas fadsf asdfa

02

0011-15.2016.501.0012  fafas fasdf asdf asdfsadf asdfasd fasd asasdff
asdfasd fasd asasdff
asdfasd fasd asasdff
0011-125.2013.501.0012
asdfasd fasd asasdff

このような数字を見るのが0011-15.2016.501.0012私が望むものです。残りは気にしませんが、これらすべての数字を1行に1つずつ含めて、きれいな新しいテキストを作成したいと思います。前の例ではテキストが必要でした。

010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012

すべての数字では、.501.常に4番目のグループとして表示されます。

sedオンラインエディタでこのコマンドを試しました。

's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\)/\1/'

動作しません。

答え1

うまくいきますが、何も変更しないか、元に変更します。しかし、このコードを少しだけ変更すると、欲しいものが得られます。

sed -n 's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\).*/\1/p'

3つのことに注意してください。

  • -nスイッチは基本的に何も印刷しないことを意味します。
  • .*選択したグループの終わりに(...)
  • p最後のコマンドは、この行を印刷することを意味します。

結果:

010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012

ところで、拡張正規表現を追加して使用すると、少し単純化できます-E。つまり、キャプチャグループの前のバックスラッシュを削除するだけです。

sed -E -n 's/([0-9]*-[0-9]*\.[0-9]*\.501\.[0-9]*).*/\1/p'

上記のWebページでは、両方の方法が機能します。

答え2

AWKを使うのはとても簡単です。 b / cは通常AWKが何もしないので、いつ実行するべきかを教えてください。つまり、IDが存在する場合は、行の先頭にIDを印刷します。

/^[0-9]+-[0-9]+\.[0-9]+\.501\.[0-9]+/{
    print $1
}

sedとは少し異なります。 b / cデフォルトでは、sedはすべてを印刷します。 (少なくともこのツールは私にとってはうまくいきます。)最初にデフォルトの動作を何もしないように変更するには、sedasを呼び出す必要があります。sed -nだから私たちはできます

s/^\([0-9]\+-[0-9]\+\.[0-9]\+\.501\.[0-9]\+\).*$/\1/p

p最後にsedに話す必要があります一致するパターンがある場合、結果が印刷されます。あなたの特定のsed表現は次のとおりですいいえこれは、すべての一致を独自に置き換え、他のすべての項目をそのまま印刷するためです。

関連情報