私はコンピュータにどのソフトウェアもインストールできない会社に勤めていますが、そこで使用するWindowsは不便です。
イントラネットからコピーした多くのテキストを整理してtxtファイルとして保存する必要があります。だから私はsed
次awk
のオンラインライブエディタを使用する必要があります。これまたはこれ
この言葉はこうです。
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はすべてを印刷します。 (少なくともこのツールは私にとってはうまくいきます。)最初にデフォルトの動作を何もしないように変更するには、sed
asを呼び出す必要があります。sed -n
だから私たちはできます
s/^\([0-9]\+-[0-9]\+\.[0-9]\+\.501\.[0-9]\+\).*$/\1/p
p
最後にsedに話す必要があります血一致するパターンがある場合、結果が印刷されます。あなたの特定のsed表現は次のとおりですいいえこれは、すべての一致を独自に置き換え、他のすべての項目をそのまま印刷するためです。