Strona 1 z 1

[SOLVED][BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 16:33
autor: rryk
Tak jak w temacie jak usunąć wszystkie znaki nowej linii z pliku lub zmiennej

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 16:47
autor: verdorben
za pomocą grep -v '^ *$'

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 16:48
autor: beluosus

Kod: Zaznacz cały

tr -d '\n'

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 17:09
autor: azhag
rryk pisze:usunąć wszystkie znaki nowej linii z (...) zmiennej
W bashu i dashu, ale już nie w żadnej lepszej powłoce (np. zsh) ? po prostu nie używaj cudzysłowu:

Kod: Zaznacz cały

azhag@debian:/tmp$ foo="a
> b
> c"
azhag@debian:/tmp$ echo "$foo"
a
b
c
azhag@debian:/tmp$ echo $foo
a b c
azhag@debian:/tmp$ 

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 17:27
autor: rryk
robie tak na zmiennej i nic nie dziala tzn
mam np zmienną

Kod: Zaznacz cały

zmienna=`cat plik`
i robię teraz to co wy mówicie następnie zapisuje do pliku otwieram a zmienna nadal ma "entery"

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 17:45
autor: azhag

Kod: Zaznacz cały

zmienna=$(tr '\n' ' ' <plik)
(mniemam, że chcesz jednak zamienić nowe linie na spacje, a nie je usunąć, jeśli się mylę zrób analogicznie jak podał beluosus)

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 19:17
autor: rryk
chce je po po prostu usunąć nie zamieniać na spacje lecz niestety nie chce to działać bo po zapisaniu do pliku znowu mam normalne linijki

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 19:24
autor: azhag
rryk pisze:chce je po po prostu usunąć nie zamieniać na spacje lecz niestety nie chce to działać bo po zapisaniu do pliku znowu mam normalne linijki
W takim razie problem leży gdzieś indziej, bo to po prostu musi działać.

Kod: Zaznacz cały

azhag@debian:/tmp$ cat plik
a
b
c
d
e
f
g
azhag@debian:/tmp$ zmienna=$(tr -d '\n' <plik)
azhag@debian:/tmp$ echo $zmienna
abcdefg
Coś pomiędzy wczytaniem zmiennej a zapisaniem pliku musiałeś zepsuć.

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 19:27
autor: rryk
Próbowałem już wszystkiego:

Kod: Zaznacz cały

sed ':a;N;$!ba;s/\n//g'
perl -e 'while (<>) { chomp; print; }; exit;'
awk '{ printf "%s ", $0 }'
a i tak po zapisaniu zmiennej do pliku mam to samo...

EDIT:
Tu chodzi o to że mam zmienną np
google=`wget -q google.pl -O -`
chce teraz zapisać to do pliku tak aby wszystko było ciągłym tekstem tj. nei zawierało "enterów"

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 19:36
autor: azhag
rryk pisze:EDIT:
Tu chodzi o to że mam zmienną np
google=`wget -q google.pl -O -`
chce teraz zapisać to do pliku tak aby wszystko było ciągłym tekstem tj. nei zawierało "enterów"
Żaden problem:

Kod: Zaznacz cały

azhag@debian:/tmp$ ZMIENNA=`wget -q google.pl -O -`
azhag@debian:/tmp$ ZMIENNA2=`wget -q google.pl -O - | tr -d '\n'`
azhag@debian:/tmp$ echo "$ZMIENNA" >plik_wielolinijkowy
azhag@debian:/tmp$ echo $ZMIENNA >plik_jednololinijkowy_ze_spacjami_zamiast_nowych_linii
azhag@debian:/tmp$ echo "$ZMIENNA2" >plik_jednololinijkowy_bez_spacji
azhag@debian:/tmp$ wc -l plik_*
    1 plik_jednololinijkowy_bez_spacji
    1 plik_jednololinijkowy_ze_spacjami_zamiast_nowych_linii
   10 plik_wielolinijkowy
   12 razem

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 23:24
autor: rryk
no akurat na google to dziala ale u mnei nie ok moze pokaze dokładnie o co mi chodzi:
mam

Kod: Zaznacz cały

ludz
 :
 
lol
</p>



a chce miec

Kod: Zaznacz cały

ludz: lol
Ps. Pod </p> są jeszcze 3 entery

Odp: [BASH] Usuwanie znaków nowej linii

: 30 maja 2010, 23:55
autor: azhag
rryk pisze:no akurat na google to dziala ale u mnei nie
Nieprawda. To działa wszędzie. Ze wszystkim, nie ma znaczenia czy to plik, zmienna, dane właśnie pobierane skądkolwiek. Zawsze kasuje znak nowej linii.

Jeśli u Ciebie ?nie działa?, to znaczy, że robisz coś źle. Ponieważ w dalszym ciągu nie pokazujesz całości, musisz sam zdebugować ? linia po linii. Konkretny fragment działa, QED kilkukrotnie.

Odp: [BASH] Usuwanie znaków nowej linii

: 31 maja 2010, 00:04
autor: beluosus
Należy pamiętać, że strony mogą być zapisane z windowsowym zakończeniem linii (CR+LF) albo unicode albo jeszcze co innego...

Odp: [BASH] Usuwanie znaków nowej linii

: 31 maja 2010, 08:43
autor: azhag
beluosus pisze:Należy pamiętać, że strony mogą być zapisane z windowsowym zakończeniem linii (CR+LF) albo unicode albo jeszcze co innego...
No tak, że ja używam tylko GNU/Linuksa, nie oznacza jeszcze, że cały świat to robi. ;)

W takim wypadku powinno wystarczyć dodanie do potoku dos2unix lub mac2unix. Unicode, z którym rzeczywiście tr ma problemy, nie powinno grać roli ? znak nowej linii jest w UTF taki sam jak w ISO. Gorzej jakby chciał usuwać polskie znaki.

Odp: [BASH] Usuwanie znaków nowej linii

: 31 maja 2010, 15:32
autor: rryk
ok już sobie poradziłem dzięki :D