sed / awkを使用して最初のスペースの後にあるものを削除する


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

sed / awk / replaceを使用して、上記のテキストでは、各行の最初のスペースの後にあるすべてのものを削除します。たとえば、出力は次のようになります。

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

任意の助けをいただければ幸いです。

回答:


35

セド

sed 's/\s.*$//'

グレップ

grep -o '^\S*'

Awk

awk '{print $1}'

コメントで指摘されているように、-oPOSIX ではありません。ただし、GNUとBSDの両方がそれを持っているので、ほとんどの人にとってうまくいくはずです。

また、\s/ \Sあなたは、あなたがリテラルスペースを使用することができ、それを認識しない場合、またはあなたがスペースとタブをしたい場合は、ブラケット表現のもの(、すべてのシステム上ではないかもしれない[...])、または[[:blank:]]文字クラス厳密に言えば、ノート(\sISを[[:space:]]CR、LF、VTなど、おそらく気にしない縦方向のスペース文字に相当します。

awk 1は、行は、空白文字で始まらない前提としています。


14
cut -d ' ' -f 1 < your-file

最も効率的です。


4
私はあなたの答えのいくつかでこれに気づき、それに理由があるのか​​疑問に思っていました:コマンドがそれなしで機能する場合でも、常に入力リダイレクトを追加するようです。<ここでなぜ便利なのか説明していただけますか?
ジョセフR.

5
@JosephR。あなたは意味cut < filecut file?そして、参照unix.stackexchange.com/a/70759/22565
ステファンChazelas

カットは、この単純な問題の最良の解決策かもしれません。より複雑なマッチングのためにawk(またはperl)を予約します。
ChuckCottrill

@StephaneChazelas(特徴的な)洞察力をありがとう:)
ジョセフR.


1

そしてperl

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

GNU grepを介して、

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.