Boşlukta sed ile nasıl eşleştirebilirim? Verilerimde sonraki 3+ sonraki boşluk karakterlerini (sekme boşluğu) eşleştirmek ve 2 boşlukla değiştirmek istiyorum. Bu nasıl yapılabilir?
Boşlukta sed ile nasıl eşleştirebilirim? Verilerimde sonraki 3+ sonraki boşluk karakterlerini (sekme boşluğu) eşleştirmek ve 2 boşlukla değiştirmek istiyorum. Bu nasıl yapılabilir?
Yanıtlar:
Karakter sınıfı \s
boşluk karakterlerini eşleşir <tab>
ve <space>
.
Örneğin:
$ sed -e "s/\s\{3,\}/ /g" inputFile
en az 3 boşluktan oluşan her sekansı iki boşlukla değiştirecektir.
AÇIKLAMA : POSIX uyumluluğu için, bir GNU sed uzantısı olduğu için karakter sınıfını [[:space:]]
kullanın \s
. Sed ve BRE'ler için POSIX teknik özelliklerine bakın
sed
ile kullanmak zorunda kaldım, [[:space:]]
çünkü \s
benim için işe yaramadı. Belki \s
bir GNU sed uzantısıdır?
[[:space:]
Biri yerine [[:blank:]]
yalnızca yatay sekmeler ve boşluklarla eşleşen (ancak yeni satırlar, dikey sekmeler vb. Olmayan) kullanabilirsiniz.
Bu MacOS 10.8’de çalışır:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
bir veya daha fazla boşlukla eşleştirmek istiyorsunuz .
-E
bayrağı da destekliyor .
Bazı eski sed sürümleri \ 'yi bir beyaz boşluk eşleme simgesi olarak tanımayabilir. Bu durumda, X'in bir boşluk ve Z'nin bir sekme olduğu '[XZ] [XZ] *' ile bir veya daha fazla boşluk ve sekme dizisini eşleştirebilirsiniz.
sed 's/[ \t]*/"space or tab"/'
sed
herhangi bir sistemde herhangi bir sürümünde çalışacağı garanti ediliyor mu? Bunun nerede diğer cevaplarla benzer şekilde çalıştığını söylemeye değmezse, sınırlamaları ve bunun istenen sonucu elde edemeyeceğini biliyoruz.