kullanım sed -e "s/[[:space:]]\+/ /g"
İşte bir açıklama:
[ # start of character class
[:space:] # The POSIX character class for whitespace characters. It's
# functionally identical to [ \t\r\n\v\f] which matches a space,
# tab, carriage return, newline, vertical tab, or form feed. See
# https://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes
] # end of character class
\+ # one or more of the previous item (anything matched in the brackets).
Yerine, sadece bir boşluk eklemek istiyorsun. [:space:]
orada çalışmayacak çünkü bu bir karakter sınıfının kısaltması ve regex motoru orada hangi karakteri koyacağını bilmiyor.
+
Çünkü en sed regex motoru ile regex kaçan gerekir +
oysa normal bir karakterdir \+
'bir ya da daha fazla' için meta karakterdir. Düzenli İfadelerin Mastering 86. sayfasında , Jeffrey Friedl, ed ve grep'in parantez içindeki parantezleri kullandığı bir dipnotta, çünkü "Ken Thompson düzenli ifadelerin esas olarak C koduyla çalışmak için kullanılacağını, ham parantezlerle eşleşmeye ihtiyaç duymanın geri referanstan daha yaygın olacağını düşünüyordu. ." Artı işareti için de aynı şekilde hissettiğini, bu nedenle onu bir meta karakter olarak kullanmak için kaçmak zorunda olduğunu varsayıyorum. Bu konuda tetikte olmak kolaydır.
Size kaçmak gerekir sed +
, ?
, |
, (
, ve )
. veya genişletilmiş regex kullanmak için -r komutunu kullanın (ardından sed -r -e "s/[[:space:]]\+/ /g"
veyased -re "s/[[:space:]]\+/ /g"