Sie können das loswerden $((...)); Der offund lenTeil der ${var:off:len}Substitution werden bereits als arithmetische Ausdrücke ausgewertet. Beispiel: foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}". Das ist dokumentiert und es ist dasselbe in zshund ksh93wie in Bash.
Mosvy
3
Hinweis: Wenn die Länge der Zeichenfolge ungerade ist, wird sie dennoch in zwei Teile geteilt, während der zweite Buchstabe länger ist.
peterh
8
Verwenden Sie splithier Zeichenfolgen und Befehlsersetzung:
Beachten Sie, dass es mit mawk oder busybox awk nicht funktioniert, da die Syntax von division /und /ERE/Operator nicht eindeutig ist und der Sonderfall ()optional ist length(in diesem Fall sind diese Implementierungen jedoch nicht POSIX-kompatibel). Verwenden length()oder length($0)hier anstelle von lengthwürde für diejenigen helfen. Sie könnten auch awk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdefdie Pipe und den zusätzlichen Prozess speichern und zum Funktionieren bringen, selbst wenn die Zeichenfolge Zeilenumbrüche enthält.
Stéphane Chazelas
1
Python 3
s = input()# Take one line of input from stdin.
x = len(s)//2# Get middle of string. "//" is floor division
print(s[:x], s[x:], sep="\n")# Print "s" up to "x", then "s" past "x", joined on newlines.
Antworten:
Verwendung Parameter Expansion und Shell Arithmetik :
Die erste Hälfte der Variablen ist:
Die zweite Hälfte der Variablen ist:
so könnten Sie verwenden:
Sie können auch den folgenden awk-Befehl verwenden:
quelle
$((...))
; Deroff
undlen
Teil der${var:off:len}
Substitution werden bereits als arithmetische Ausdrücke ausgewertet. Beispiel:foo=01234567; echo "${foo:0:${#foo}/2} ${foo:${#foo}/2}"
. Das ist dokumentiert und es ist dasselbe inzsh
undksh93
wie in Bash.Verwenden Sie
split
hier Zeichenfolgen und Befehlsersetzung:quelle
Ein anderes
awk
Skript kann sein:quelle
/
und/ERE/
Operator nicht eindeutig ist und der Sonderfall()
optional istlength
(in diesem Fall sind diese Implementierungen jedoch nicht POSIX-kompatibel). Verwendenlength()
oderlength($0)
hier anstelle vonlength
würde für diejenigen helfen. Sie könnten auchawk 'BEGIN{half = int(length(ARGV[1]) / 2); print substr(ARGV[1], 1, half) ORS substr(ARGV[1], half+1)}' abcdef
die Pipe und den zusätzlichen Prozess speichern und zum Funktionieren bringen, selbst wenn die Zeichenfolge Zeilenumbrüche enthält.Python 3
Beispielsweise,
Wenn die Zeichenfolge keine gerade Zahl ist, ist die zweite Zeile länger. Z.B
quelle