Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-07-28 19:27:51

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Dodanie nowej linii w tekście

Mam ci ja plik w formacie:

Kod:

Lorem ipsum
* dolor
* sit
* amet

Muszę go przerobić na:

Kod:

Lorem ipsum

* dolor
* sit
* amet

ewentualnie (choć wolę powyższy):

Kod:

Lorem ipsum

* dolor

* sit

* amet

Wszystko jedno czy sed, czy awk, czy tr, czy perl (jeśli już nie da się po ludzku ;)) czy inny pies, byle tekstowo. Dumam nad tym i dumam... Pomożecie?


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#2  2010-07-28 19:47:20

  lessmian - Użytkownik

lessmian
Użytkownik
Skąd: Kraków
Zarejestrowany: 2009-09-25

Re: Dodanie nowej linii w tekście

Takie cuś będzie dobre?

Kod:

sed 's/\(Lorem ipsum\)/\1\n/'

Kod:

$ cat test.txt
Lorem ipsum
* dolor
* sit
* amet
$ sed -i 's/\(Lorem ipsum\)/\1\n/' test.txt
$ cat test.txt
Lorem ipsum

* dolor
* sit
* amet
[lessmian@polikarp:~/scripts]$

Offline

 

#3  2010-07-28 20:25:43

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Dodanie nowej linii w tekście

Tak, tylko to Lorem ipsum to był przykład. Chodzi o uniwersalną metodę oddzielenie jakiegoś „zwykłego” tekstu, od tego zaczynającego się od „*”.


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#4  2010-07-28 20:53:58

  lessmian - Użytkownik

lessmian
Użytkownik
Skąd: Kraków
Zarejestrowany: 2009-09-25

Re: Dodanie nowej linii w tekście

azhag napisał(-a):

Chodzi o uniwersalną metodę oddzielenie jakiegoś „zwykłego” tekstu, od tego zaczynającego się od „*”

Tego akurat nie napisałeś w pierwszym poście ;)

Można to zrobić tak:

Kod:

sed '0,/\(^\*\)/s//\n\1/'

Ale to znowu zadziała tylko dla pierwszego bloku tekstu - jeśli w pliku będzie więcej takich, trzeba poszukać czegoś innego.

Offline

 

#5  2010-07-28 21:29:25

  ethanak - Użytkownik

ethanak
Użytkownik
Skąd: Ungwenor
Zarejestrowany: 2010-07-19
Serwis

Re: Dodanie nowej linii w tekście

W awku się da - możesz zapamiętać czy poprzednia linia zaczynała się gwiazdką i jeśli nie, a bieżąca zaczyna się gwiazdką to dodajesz przed bieżącą znak nowej linii. Tak samo dla przypadku odwrotnego...

Kod:

cat dupa.txt | awk 'BEGIN {a=0}; {b=0; if (substr($0,0,1) == "*") b=1;if (a !=b) print "";a=b;print $0 }'

Może być?

Pewnie można prościej ale właśnie wypiłem jedenaste piwo :)


Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
Zespół Adwokacki Dyskrecja

Offline

 

#6  2010-07-28 21:42:41

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Dodanie nowej linii w tekście

lessmian napisał(-a):

azhag napisał(-a):

Chodzi o uniwersalną metodę oddzielenie jakiegoś „zwykłego” tekstu, od tego zaczynającego się od „*”

Tego akurat nie napisałeś w pierwszym poście ;)

No... przynajmniej nie wprost, jedynie wspomniałem o „formacie”. Moja wina :)

lessmian napisał(-a):

Można to zrobić tak:

Kod:

sed '0,/\(^\*\)/s//\n\1/'

Ale to znowu zadziała tylko dla pierwszego bloku tekstu - jeśli w pliku będzie więcej takich, trzeba poszukać czegoś innego.

O, dzięki wielkie. :)

Na razie biorę to, jak ktoś wymyśli co zrobić, jeśli owe bloki występować będą częściej.

W międzyczasie wydumałem (jeżu, przecież to takie banalne!) jak zrobić, aby zawsze stawiał znak nowej linii, również między liniami zaczynające się od gwiazdki):

Kod:

sed "s/^*/\n*/g" plik

Dopisek:

ethanak napisał(-a):

W awku się da - możesz zapamiętać czy poprzednia linia zaczynała się gwiazdką i jeśli nie, a bieżąca zaczyna się gwiazdką to dodajesz przed bieżącą znak nowej linii. Tak samo dla przypadku odwrotnego...

Kod:

cat dupa.txt | awk 'BEGIN {a=0}; {b=0; if (substr($0,0,1) == "*") b=1;if (a !=b) print "";a=b;print $0 }'

Może być?

Dzięki. :)

ethanak napisał(-a):

Pewnie można prościej ale właśnie wypiłem jedenaste piwo :)

Pozdrów ode mnie dwunaste. ;)

Ostatnio edytowany przez azhag (2010-07-28 21:46:09)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#7  2010-07-28 22:38:38

  lessmian - Użytkownik

lessmian
Użytkownik
Skąd: Kraków
Zarejestrowany: 2009-09-25

Re: Dodanie nowej linii w tekście

Ha, dłubałem i wydłubałem :)

Kod:

sed '/^[^*]/{n;s/\(^*\)/\n\1/}'

Jednak ten sed nie jest taki głupi ;>

Ostatnio edytowany przez lessmian (2010-07-28 22:42:09)

Offline

 

#8  2010-07-28 22:45:54

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Dodanie nowej linii w tekście

lessmian napisał(-a):

Ha, dłubałem i wydłubałem :)

Kod:

sed '/^[^*]/{n;s/\(^*\)/\n\1/}'

Jednak ten sed nie jest taki głupi ;>

nie do końca działa:

Kod:

azhag@debian:/tmp$ cat plik3
Lorem ipsum
* dolor
* sit
* amet
azhag@debian:/tmp$ cat plik2
Lorem ipsum
dolor sit
* dolor
* sit
* amet
azhag@debian:/tmp$ sed '/^[^\*]/{n;s/\(^\*\)/\n\1/}' plik3
Lorem ipsum

* dolor
* sit
* amet
azhag@debian:/tmp$ sed '/^[^\*]/{n;s/\(^\*\)/\n\1/}' plik2
Lorem ipsum
dolor sit
* dolor
* sit
* amet

Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#9  2010-07-28 23:26:25

  lessmian - Użytkownik

lessmian
Użytkownik
Skąd: Kraków
Zarejestrowany: 2009-09-25

Re: Dodanie nowej linii w tekście

Czary. Na Twoim pliku nie działa, na moim napisanym z palca śmiga aż miło.

Kod:

$ cat test3.txt
foo
Bar
baz
* dupa
* cycki
$ sed '/^[^\*]/{n;s/\(\*\)/\n\1/}' test3.txt
foo
Bar
baz

* dupa
* cycki

Chwilowo się poddaje, hgw, idę spać ;)

Offline

 

#10  2010-07-28 23:35:02

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: Dodanie nowej linii w tekście

U mnie na Twoim też śmiga, nawet po dopisaniu tego czy tamtego... Czary.

Debianoc. :)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)