Wie wandelt man mit 4 Leerzeichen in 2 Leerzeichen um sed
? Ist es möglich?
Ich habe das gefunden, aber es konvertiert Tab in Leerzeichen:
sed -r ':f; s|^(\t*)\s{4}|\1\t|g; t f' file
Das von Ihnen veröffentlichte Skript konvertiert 4 * n Leerzeichen in n Tabulatoren, nur wenn diesen Leerzeichen nur Tabulatoren vorangestellt sind.
Wenn Sie 4 Leerzeichen durch 2 Leerzeichen ersetzen möchten, aber nur in Einrückung, während dies mit sed möglich ist, empfehle ich stattdessen Perl.
perl -pe 's{^((?: {4})*)}{" " x (2*length($1)/4)}e' file
In sed:
sed -e 's/^/~/' -e ': r' -e 's/^\( *\)~ /\1 ~/' -e 't r' -e 's/~//' file
Vielleicht möchten Sie indent
stattdessen verwenden.
Nested quantifiers in regex; marked by <-- HERE in m/^( {4}* <-- HERE )/ at -e line 1.
Funktioniert der einfache Weg nicht:
Wenn nicht, posten Sie eine Eingabe, bei der dies fehlschlägt.
quelle
Wenn nur führende Leerzeichen konvertiert werden sollen:
Mit Kommentaren:
Schauen Sie sich auch die
'ts'
Einstellungen und:retab
Befehle von vim anquelle
'ts'
und:retab
keine Lösungen für die Frage sind, sondern verwandte und dazu beitragen können, Ihr Gesamtziel zu erreichen. Sie können tunvim -- *.c
,:set ts=...
und dann:argdo retab
oder:argdo retab!
. Siehe auch die'sw'
Einrückungsfunktionen von Option und vim.Es funktioniert, indem die führenden Leerzeichen in vier Instanzen derselben Gruppe aufgeteilt werden (sodass sie alle gleich sind) und dann durch nur zwei Instanzen der Gruppe ersetzt werden.
quelle
\+
). Vielen Dank.Das sollte nur führende Sequenzen von Räumen zusammenpressen.
quelle