Saya memiliki beberapa file teks yang berisi beberapa kolom yang dipisahkan oleh berbagai jumlah ruang, tetapi saya membutuhkan satu tab tunggal sebagai pemisah. Apakah mungkin dilakukan di Bash?
linux
bash
text-manipulation
Pengguna tidak diketahui
sumber
sumber
Jawaban:
Untuk mengonversi urutan lebih dari satu ruang ke sebuah tab, tetapi tinggalkan ruang tersendiri :
Untuk melakukan ini untuk sejumlah file:
atau
atau
sumber
sed: -e expression #1, char 1: unknown command: `.'
find
di bawah.sed
tidak suka memiliki ruang sebelum ekstensi cadangan. Saya sudah mengedit jawaban saya. Terima kasih atas laporannya.Jika karakter Anda banyak tab, Anda juga dapat menggunakan
tr -s
:Sebagai contoh:
Semua ruang putih akan menjadi satu.
sumber
Anda dapat menggunakan
sed
untuk mengganti sejumlah spasi dengan tab .:Contoh untuk mengganti satu-atau-lebih-spasi dengan satu tab:
sumber
Jawaban termudah hanya menggunakan
bash
adalah:Jika ada sejumlah variabel kolom, Anda bisa melakukan ini, tetapi itu hanya akan berfungsi
bash
, bukansh
:misalnya
menghasilkan:
(ada tab di antara masing-masing, tetapi sulit untuk melihat ketika saya menempelkannya di sini)
Anda juga bisa melakukannya menggunakan
sed
atautr
, tetapi perhatikan bahwa penanganan kosong pada awalnya menghasilkan hasil yang berbeda.sed:
tr:
sumber
perl -p -i -e 's/\s+/\t/g' *.txt
sumber
Coba skrip SED berikut:
Di mana <TAB> menekan tombol TAB.
sumber
Ini adalah solusi yang sangat sederhana:
sed pada dasarnya bekerja dengan cara ini (sed 's / old_pattern / new_pattern / g'). Dalam kasus ini pola lama adalah "\ s +" yang berarti menemukan spasi "s" satu atau lebih "+" dan garis miring "\" untuk menafsirkannya sebagai ekspresi reguler.
Pola baru adalah tab "\ t" yang ditulis dalam format ekspresi reguler dan "g" menerapkan penggantian ke semua baris "secara global".
sumber