Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: deathfish 24 Února 2014, 15:11:09
-
Prosím, jak rozdělit textový řádek podle konkrétního slova, respektive odentrovat jeden řádek do více řádků začínajícív zadaným výrazem?
Příklad (dělící výraz 1111)
text: aaaaa1111bbbbb1111cccccc1111dsdsdsds1111ghghgh
výsledek:
1111bbbbb
1111cccccc
1111dsdsdsds
1111ghghgh
-
> echo aaaaa1111bbbbb1111cccccc1111dsdsdsds1111ghghgh | sed 's/\([1]\+\)/\n\1/g'
aaaaa
1111bbbbb
1111cccccc
1111dsdsdsds
1111ghghgh
aka:
s/// - substituce alias nahrad
() - dej do cache, na druhe strane prikazu vrat pomoci \1
\([1]\+\) - vyber po sobe jdouci rady jednicek
\n je novej radek
s///g - delej vsechny vyskyty na radku, ne jen to prvni - tedy "g" na konci
a nebo hezky "ciste" perlem:
> echo aaaaa1111bbbbb1111cccccc1111dsdsdsds1111ghghgh | perl -ne 'my @foo = split /1+/, $_; print join("\n1111", @foo)'
aaaaa
1111bbbbb
1111cccccc
1111dsdsdsds
1111ghghgh
-
a nebo hezky "ciste" perlem:
> echo aaaaa1111bbbbb1111cccccc1111dsdsdsds1111ghghgh | perl -ne 'my @foo = split /1+/, $_; print join("\n1111", @foo)'
aaaaa
1111bbbbb
1111cccccc
1111dsdsdsds
1111ghghgh
To "čistě" je už na první pohled podezřelé... Tohle se mi líbí víc:
perl -ne 'print s/(1111)/\n\1/rg'
;)
Já se kvůli tobě na ten Perl nakonec i naučim..
-
více by mi vyhovoval ten sed (super vysvětlení) jelikož se snažím matlat v Bashi, ale nebere mi výraz který obsahuje zanaky např. = - "
proto jsem použil tento perl
perl -ne 'print s/(1111)/\n\1/rg'
Díky ;)