Saya mendapat string seperti berikut:
test.de. 1547 IN SOA ns1.test.de. dnsmaster.test.de. 2012090701 900 1000 6000 600
sekarang saya ingin mengganti semua tab / spasi di antara catatan hanya dengan satu ruang sehingga saya dapat dengan mudah menggunakannya dengan cut -d " "
Saya mencoba yang berikut ini:
sed "s/[\t[:space:]]+/[:space:]/g"
dan berbagai variasi tetapi tidak bisa membuatnya bekerja. Ada ide?
cut
dukungan Anda-w
?Jawaban:
Menggunakan
sed -e "s/[[:space:]]\+/ /g"
Berikut penjelasannya:
Untuk pengganti Anda, Anda hanya ingin memasukkan spasi.
[:space:]
tidak akan bekerja di sana karena itu adalah singkatan untuk kelas karakter dan mesin regex tidak akan tahu karakter apa yang harus diletakkan di sana.Itu
+
harus melarikan diri dalam regex karena dengan mesin regex sed+
adalah karakter normal sedangkan\+
merupakan metacharacter untuk 'satu atau lebih'. Di halaman 86 dari Mastering Regular Expressions , Jeffrey Friedl menyebutkan dalam catatan kaki bahwa ed dan grep menggunakan tanda kurung yang lolos karena "Ken Thompson merasa ekspresi reguler akan digunakan untuk bekerja terutama dengan kode C, di mana perlu mencocokkan tanda kurung mentah akan lebih umum daripada referensi ulang. . " Saya berasumsi bahwa dia merasakan hal yang sama tentang tanda plus, maka kebutuhan untuk menghindarinya untuk menggunakannya sebagai metacharacter. Sangat mudah untuk tersandung oleh ini.Dalam sed Anda harus melarikan diri
+
,?
,|
,(
, dan)
. atau gunakan -r untuk menggunakan regex yang diperluas (kemudian terlihat sepertised -r -e "s/[[:space:]]\+/ /g"
ataused -re "s/[[:space:]]\+/ /g"
sumber
\+
bukan hanya+
?\+
Anda dapat menggunakan opsi
-s
("pemerasan") daritr
:Kelas
[:blank:]
karakter terdiri dari spasi dan tab.sumber
Saya suka menggunakan alias berikut untuk bash. Membangun apa yang orang lain tulis, gunakan sed untuk mencari dan mengganti beberapa spasi dengan satu spasi. Ini membantu mendapatkan hasil yang konsisten dari potongan. Pada akhirnya, saya menjalankannya melalui sed sekali lagi untuk mengubah ruang ke tab sehingga lebih mudah dibaca.
sumber