Bagaimana seseorang mengkonversi 4 spasi menjadi 2 spasi dengan sed
? Apa itu mungkin?
Saya menemukan ini tetapi itu mengonversi tab ke spasi:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
Skrip yang Anda posting mengonversi 4 * n spasi menjadi n tab, hanya jika spasi tersebut didahului hanya dengan tab.
Jika Anda ingin mengganti 4 spasi dengan 2 spasi, tetapi hanya dalam lekukan, sementara itu mungkin dilakukan dengan sed, saya sarankan Perl sebagai gantinya.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
Sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Anda mungkin ingin menggunakannya indent
.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
Tidak dengan cara langsung:
Jika tidak, posisikan beberapa input jika gagal.
sumber
Jika hanya spasi yang akan dikonversi:
Dengan komentar:
Juga lihat
'ts'
pengaturan dan:retab
perintah vimsumber
'ts'
dan:retab
bukan solusi untuk pertanyaan, tetapi terkait dan dapat membantu mengatasi sasaran keseluruhan Anda. Anda bisa melakukannyavim -- *.c
,:set ts=...
lalu:argdo retab
atau kemudian:argdo retab!
. Lihat juga'sw'
opsi dan kemampuan indentasi vim sendiri.Ini bekerja dengan membagi spasi memimpin menjadi empat instance dari grup yang sama (jadi mereka semua sama) dan kemudian menggantinya dengan hanya dua instance dari grup.
sumber
\+
). Terima kasih.Itu seharusnya hanya menekan urutan ruang terkemuka.
sumber