特定の列から単語(文字の後にスペース)を削除する

特定の列から単語(文字の後にスペース)を削除する

次の形式のファイルがあります。

cat dog AHF123432 | 123432 | dhfshfjdh
lion  AFG23412 |23412 | dfshjhfjdhj

最初の列から文字のみを含む単語(たとえば、最初の行の猫(後ろのスペース)と犬、2番目の行のライオン)を削除する必要があります。

私の結果は次のようになります。

AHF123432 | 123432 |  dhfshfjdh    
AFG23412 | 23412 | dhfshfjdh

ベストアンサー1

これにより、行の先頭のすべてのアルファベットの単語が削除されます。

$ sed -r 's/^([[:alpha:]]* )*//' filename.tsv
AHF123432 | 123432 | dhfshfjdh
AFG23412 |23412 | dfshjhfjdhj

または、出力を新しいファイルに保存します。

sed -r 's/^([[:alpha:]]* )*//' filename.tsv > final.tsv

どのように動作しますか?

  • [[:alpha:]]*スペースが続く任意の数のアルファベット文字と一致します。言い換えれば、単語の後にスペースが続くのと一致します。

    詳しくは、[[:alpha:]]単一のアルファベット文字と一致します。 「[[:alpha:]] *」はこれらの文字の数と一致します。

  • ([[:alpha:]]* )*スペースが続くこれらの単語の数と一致します。

  • ^([[:alpha:]]* )*スペースは後続のランダムな数の単語と一致しますが、行^の先頭でのみ始まります。

  • 置換コマンドは、一致するすべての単語を削除します。置換コマンドの形式s/old/new/は次のとおりです。old上記の式は、行の先頭から始まり、任意の数の単語に一致します。この単語を空の文字列に置き換えたいので、ここでは空の文字列を使用しますnew

過去には、アルファベット文字マッチングのための正規表現はありました[a-zA-Z]。最新のUnicodeフォントでは、これはより安定しています。上記で使用した正規表現は[:alpha:]Unicodeに安全であるためです。

おすすめ記事