sed -r 's/([^ .]+ [^ .]+) /\1\n/g' <<< "Vulpea iute a sărit peste câinele leneș"
Rapidul
a sărit vulpea
peste
caine lenes
Setul de caractere [^ .]+
înseamnă unul sau mai multe +
personaje de orice fel .
excluzând ^
spații albe. Deci grupul de captură ([^ .]+ [^ .]+)
potriviri pentru modele ca sfoară de sfoară
. Întreaga expresie regulată are un spațiu alb suplimentar la sfârșit ([^ .]+ [^ .]+)
(ar putea fi inclusă în grupul de captură pentru a-l păstra).
Cu sed
prin folosirea înlocuitorului s
comanda înlocuim modelul potrivit cu conținutul primului grup de captură \1
și un nou caracter de linie \n
în loc de spațiul alb. Pe lângă steag g
repetăm comanda până la sfârșitul fiecărei linii. The -r
opțiunea activează expresiile regulate extinse.
Actualizare - acesta este răspunsul real:
sed -r 's/(.{8}) /\1\n/g' <<< "De unde știm că se va potrivi cu numărul predefinit de caractere?"
Cum facem
stiu ca este
merge la
se potrivesc
predefinite
Un numar de
personaje?
În acest exemplu, capturam șiruri cu lungimea de cel puțin 8 caractere (inclusiv spații albe) urmate de un spațiu alb.
Putem verifica lungimea reală a liniilor de ieșire astfel:
sed -r 's/(.{8}) /\1\n/g' <<< "De unde știm că se va potrivi cu numărul predefinit de caractere?" \
| awk '{lungime tipărire}'
9
10
8
9
11
9
11
Și cu ajutorul răspunsurilor la întrebare Cum se utilizează printf pentru a imprima un caracter de mai multe ori? [pată] putem obține rezultatul dorit.
sed -r 's/(.{8}) /\1\n/g' <<< "De unde știm că se va potrivi cu numărul predefinit de caractere?" \
| awk '{odihnă=(12 - lungime); printf "%s%s|\n", $0, substr(".........", 1, rest)}'
Cum facem...|
stiu ca este..|
merg la....|
se potrivesc cu...|
predefinite.|
număr de...|
personaje?.|
În cazul în care doriți să spargeți cuvintele, eliminați spațiul alb final din expresia regulată de mai sus /(.{8})/
. Iată un exemplu în care lungimea maximă a liniei va fi de exact 10 caractere sau mai puțin, unde a doua sed
comanda va tăia spațiile albe din jurul fiecărei linii noi.
sed -r 's/(.{10})/\1\n/g' <<< "De unde știm că se va potrivi cu numărul predefinit de caractere?" \
| sed -r 's/(^ | $)//g' \
| awk '{odihnă=(10 - lungime); printf "%s%s|\n", $0, substr(".........", 1, rest)}'
Cum facem.|
stiu ca este|
merg la..|
se potrivesc cu.|
predefinit|
d numărul o|
f caracter|
rs?.......|