
Wie verschiebe ich die angegebene Zeichenfolge (beginnend mit „math“) mithilfe von sed (mit regulärem Ausdruck) an eine bestimmte Position (20. Spalte)? Ich möchte die Zeichenfolge, die mit „math“ beginnt, in jeder Zeile in die Spalte 20 verschieben, und die Zeichenfolge „math“ steht immer im letzten Wort der Zeile.
how are you math123
good math234
try this math500
Antwort1
Wenn du wirklichmussverwenden sed
, dann wäre ein möglicher Algorithmus, weiterhin Leerzeichen vor der Zeichenfolge einzufügen, math
solange 18 oder weniger Zeichen vorangehen:
$ sed -e :a -e 's/\(^.\{,18\}\)math/\1 math/; ta' file
how are you math123
good math234
try this math500
Wenn Sie nur das letzte Vorkommen der Zeichenfolge verschieben möchten, können Sie es am Ende der Zeile verankern. Beispielsweise bei etwas wie
$ cat file
how are you math123
good math234
try this math500
math101 is enough math
Dannvorausgesetzt, es gibt keine nachstehenden Leerzeichen
$ sed -e :a -e 's/^\(.\{,18\}\)\(math[^[:space:]]*\)$/\1 \2/; ta' file
how are you math123
good math234
try this math500
math101 is enough math
Wenn Ihr Computer sed
einen erweiterten regulären Ausdrucksmodus hat, können Sie ihn vereinfachen zu
sed -E -e :a -e 's/^(.{,18})(math[^[:space:]]*)$/\1 \2/; ta'
Antwort2
Während sed nicht gut in Mathematik ist, ist awk darin hervorragend:
$ awk -Fmath '{printf "%-20smath%s\n",$1,$2}' file
how are you math123
good math234
try this math500
Dieser Code kann mögliche Sonderfälle möglicherweise nicht richtig behandeln, er hilft Ihnen jedoch beim Einstieg.
Antwort3
perl -pe 's/(?=math)/" " x (19-length($`))/e' yourfile
perl -pe 's// / while /.*\K(?=math)/g && 19 > pos' yourfile
Arbeiten
- Die Perl-Option
-p
richtet eine implizite Dateileseschleife zeilenweise ein. Der aktuelle Datensatz, auch Zeile genannt, wird in der$_
Variable gespeichert. - Die
while
Schleife macht Folgendes:- a)
/.*\K(?=math)/g
arbeitet mit der aktuellen Zeile$_
undregex
sucht nach der Position, an der sich rechts davon die Zeichenfolge „math“ befinden kann und links davon alles Mögliche.- b) Nach dem Erfolg des regulären Ausdrucks wird als nächstes geprüft, ob die Position kleiner als 19 ist. Andernfalls wird die Schleife verlassen
while
. - c) Der Hauptteil der Schleife fügt an der Position, die in der Aktionsanweisung der Schleife
while
festgelegt wurde, ein Leerzeichen ein .while
- b) Nach dem Erfolg des regulären Ausdrucks wird als nächstes geprüft, ob die Position kleiner als 19 ist. Andernfalls wird die Schleife verlassen
- a)
Ergebnisse
1 2 3
123456789012345678901234567890
good math234
how are you math123
1234567890
good math234
try this math500
math101 is enough math