Menggunakan sed / awk untuk menghapus apa pun setelah ruang pertama


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

Menggunakan sed / awk / replace, dalam teks di atas saya ingin menghapus apa pun yang muncul setelah spasi pertama di setiap baris. Misalnya outputnya adalah:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

bantuan apa pun akan dihargai.

Jawaban:


35

Sed

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

Grep

grep -o '^\S*'

Awk

awk '{print $1}'

Seperti yang ditunjukkan dalam komentar, -obukan POSIX; namun baik GNU dan BSD memilikinya, jadi itu harus bekerja untuk kebanyakan orang.

Juga, \s/ \Smungkin tidak ada di semua sistem, jika sistem Anda tidak mengenalinya, Anda dapat menggunakan ruang literal, atau jika Anda ingin ruang dan tab, yang ada dalam ekspresi kurung ( [...]), atau [[:blank:]]kelas karakter (perhatikan bahwa dengan tegas \sadalah setara dengan [[:space:]]dan termasuk karakter spasi vertikal juga seperti CR, LF atau VT yang Anda mungkin tidak peduli).

Yang awk mengasumsikan garis tidak dimulai dengan karakter kosong.


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

akan menjadi yang paling efisien.


4
Saya perhatikan ini di beberapa jawaban Anda dan saya bertanya-tanya apakah ada alasan untuk itu: Anda sepertinya selalu menambahkan pengalihan input bahkan ketika perintah dapat bekerja tanpanya. Bisakah Anda jelaskan mengapa <ini berguna di sini?
Joseph R.

5
@ JosephephR. Maksudmu cut < filevs cut file? Kemudian lihat unix.stackexchange.com/a/70759/22565
Stéphane Chazelas

cut mungkin solusi terbaik untuk masalah sederhana ini. Saya akan memesan awk (atau perl) untuk pencocokan yang lebih kompleks.
ChuckCottrill

@StephaneChazelas Terima kasih atas wawasan (karakteristik) :)
Joseph R.


1

Dan yang melaluinya perl,

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

Melalui GNU grep,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.