2017-12-07 6 views
2

Ich möchte eine Regel erzwingen, dass keine Zeile in einem python Code mehr als 80 Zeichen lang sein würde. Dazu zähle ich die Länge der gesamten Zeile in der Datei mit einem Bash-Skript. Allerdings muss ich die Anfangsräume für den Einzug ausschließen. Ich möchte von beginnen zu zählen, wo das erste Zeichen in der Zeile zu sehen ist, bis zum letzten Zeichen: zB:Wie zählt man die Länge einer Zeile in bash, so dass Leerzeichen für den Einzug ausgeschlossen werden?

this is an example line 

length() muss zurück (31-8 = 23) anstelle von 31

Wie erreiche ich dies mit einer sed, awk oder grep Abfrage?

+0

Das ist nicht eine sehr nützliche Einschränkung ist, aber ist es? Wenn ich 10 Ebenen tief eindrücke, aber nicht mehr als 80 Zeichen nach dem Einzug, erfülle ich die Anforderung, aber es ist sicherlich kein guter Stil. –

+1

Ich verstehe was du meinst. Aber das ist, Code zu überprüfen, der von den Studenten eingereicht wird, die zum ersten Mal programmieren. Sie müssen gute Programmierpraktiken lernen (Zeilen mit mehr als 80 Zeichen sollten mit '\' gebrochen werden), aber ihre Projekte sind nicht so kompliziert, dass sie mehr als 3-4 Einrückungsstufen durchlaufen. – learnerX

Antwort

5
$ echo ' this is an example line' | awk '{gsub(/^ +/,""); print length}' 
23 

Erläuterung:

gsub(/^ +/,"") - Kurz ersetzen Raum Start Zeichen mit null in aktueller Datensatz/Zeile/Zeile.

  • ^ behauptet Position am Anfang des Strings,
  • Raum als char
  • + Quantifizierer - Spiele zwischen einem und beliebig oft, so oft wie möglich, etwas zurückzugeben je nach Bedarf (gierig),
+1

Vielen Dank für die Antwort und die detaillierte Erklärung dazu. – learnerX

0

Mit POSIX-Shell

a='  this is an example line' 
echo "${#a}" 
b="${a%%[^ ]*}" 
echo "${#b}" 
c="${a#$b*}" 
echo "${#c}" 

Ausgang

31 
8 
23 
Verwandte Themen