Bagaimana saya bisa mencocokkan spasi putih di sed? Dalam data saya, saya ingin mencocokkan semua 3+ karakter spasi putih berikutnya (ruang tab) dan menggantinya dengan 2 spasi. Bagaimana ini bisa dilakukan?
Bagaimana saya bisa mencocokkan spasi putih di sed? Dalam data saya, saya ingin mencocokkan semua 3+ karakter spasi putih berikutnya (ruang tab) dan menggantinya dengan 2 spasi. Bagaimana ini bisa dilakukan?
Jawaban:
Kelas karakter \s
akan cocok dengan karakter spasi <tab>
dan <space>
.
Sebagai contoh:
$ sed -e "s/\s\{3,\}/ /g" inputFile
akan mengganti setiap urutan setidaknya 3 spasi putih dengan dua spasi.
KETERANGAN : Untuk kepatuhan POSIX, gunakan kelas karakter [[:space:]]
alih-alih \s
, karena yang terakhir adalah ekstensi sed GNU. Lihat spesifikasi POSIX untuk sed dan BRE
sed
saya harus menggunakan [[:space:]]
karena \s
tidak bekerja untuk saya. Mungkin \s
adalah GNU sed ekstensi?
[[:space:]
satu dapat menggunakan [[:blank:]]
yang tidak cocok dengan tab dan spasi horisontal saja (tetapi tidak ada baris baru, tab vertikal dll).
Ini berfungsi pada MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
mencocokkan satu atau lebih spasi.
-E
bendera juga.
Beberapa versi sed yang lebih lama mungkin tidak dikenali sebagai token pencocokan spasi putih. Dalam hal ini Anda dapat mencocokkan urutan satu atau lebih spasi dan tab dengan '[XZ] [XZ] *' di mana X adalah spasi dan Z adalah tab.
sed 's/[ \t]*/"space or tab"/'
sed
apa pun pada sistem apa pun? Jika tidak, mungkin perlu disebutkan di mana ini bekerja dengan cara yang sama dengan jawaban lainnya, supaya kita tahu keterbatasan dan di mana ini mungkin tidak memiliki hasil yang diinginkan.