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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

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

Post autor: rryk »

Tak jak w temacie jak usunąć wszystkie znaki nowej linii z pliku lub zmiennej
verdorben
Wytworny Kaczor
Wytworny Kaczor
Posty: 470
Rejestracja: 30 mar 2009, 18:00
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: MATE
Architektura: ARM

Odp: [BASH] Usuwanie znaków nowej linii

Post autor: verdorben »

za pomocą grep -v '^ *$'
perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
Inny OS: PLD Linux
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post autor: beluosus »

Kod: Zaznacz cały

tr -d '\n'
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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$ 
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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"
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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)
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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ć.
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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"
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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.
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post autor: beluosus »

Należy pamiętać, że strony mogą być zapisane z windowsowym zakończeniem linii (CR+LF) albo unicode albo jeszcze co innego...
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
azhag
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 151
Rejestracja: 24 maja 2010, 19:30
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post 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.
Polski portal Debiana: http://dug.net.pl/
Awatar użytkownika
rryk
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 206
Rejestracja: 04 mar 2008, 16:00
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [BASH] Usuwanie znaków nowej linii

Post autor: rryk »

ok już sobie poradziłem dzięki :D
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości