sed a \n
Alexandr Malusek
malusek na hroch.ujf.cas.cz
Středa Prosinec 20 18:12:39 CET 2000
azeleny na csas.cz writes:
> co to zkusit takto:
> cat X | sed -f script.sed
>
> kde script.sed bude:
> =============
> s/\
> //g'
> =============
>
> Pod windowsama v GNU sed32 neco takoveho pouzivam.
sed-u je nekolik variant. V klasickem sed-u by vyse uvedena konstrukce
pod Unixem fungovat nemela, v jinych sedech to fungovat muze. V
MS-Windows se deji podivne veci, takze funkcnost vyse uvedeno prikladu
bude spis vedlejsim efektem cehosi (konverze koncu radek, ...) nez
korektnim chovanim.
Knihu o sed-u od O'Reilly ted u sebe nemam, takze nasledujici popis je
treba brat s velkou rezervou.
sed napred _celou radku_ nacte do sveho pattern space (= vstupni
bafr), a teprve pak v tomto pattern space aplikuje napr. substituci
prikazem "s". Ukoncovac radky, znak "\n", se ale do pattern space
neuklada, takze ho neni mozne substituovat!
A i kdyz ho tam dostanete, napr. prikazem G, tak si nepomuzete,
protoze pattern space je pri vystupu automaticky doplnen o '\n' na
konci.
Priklady:
$ cat f1
line 1
line 2
line 3
$ sed -n -e l < f1
line 1$ # Takto vypada pattern space po nacteni radky 1
line 2$ # ... 2
line 3$ # ... 3
$ sed -n -e G -e l < f1
line 1\n$ # prikaz "G" pridal do pattern space znak '\n'
line 2\n$
line 3\n$
$ sed -n -e G -e 's/\n/XYZ/g' -e l < f1
line 1XYZ$ # prikaz "s" nahradil '\n' v pattern space za "XYZ"
line 2XYZ$
line 3XYZ$
$ sed -n -e N -e N -e l < f1
line 1\nline 2\nline 3$ # Radky 1-3 byly spojeny v pattern space
$ sed -n -e N -e N -e 's/\n//g' -e l < f1
line 1line 2line 3$ # Znak '\n' byl z pattern space odstranen
> On totiz za tm \ nacte znak odradkovani. Taky jsem se _DLOUHO_ moril s
> marnym pokusem \n ...
V pripade sed-u je lepsi si napred precist teorii. Jinak jen ztracite
cas.
> > > narazil jsem na jednu drobnost - jak se rekne sed-u, aby vyhodil ze
> > > vstupu znaky 'konec radku'?
Pro tento ucel je asi nejlepsi tr. Perl je dalsi varianta. Jeho
koncepce zpracovani vstupu je pruhlednejsi. Pattern space a hold space
radu lidi silne mate.
> > > cat x |sed 's/\n//g'
Zase ten nadbytecny cat ... ;-)
--
A. Malusek (malusek na ujf.cas.cz)
UJF AV CR
Další informace o konferenci Linux