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  2021-10-30 01:04:54

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Poprawa plików tekstowych

Jest sobie sporo plików tekstowych i część z nich kwalifikuje się do poprawy. Chodzi o to, że dany plik może zawierać od zera do kilkudziesięciu wystąpień takich fraz jak ta poniższa:

Kod:

![](/img/2016/08/001.jakis-tam-text1.jpg#huge)

Trzeba z tego zrobić coś na poniższy wzór:

Kod:

![jakis tam text1](/img/2016/08/001.jakis-tam-text1.jpg#huge)

Czyli w miejsce między [ ] trzeba wstawić nazwę obrazka.

Problem jest jeszcze taki, że niektóre pliki tekstowe mają takie linijki:

Kod:

| ![](/img/2021/10/004.jakis-tam-text2.jpg#small) | ![](/img/2021/10/005.jakis-tam-text3.jpg#small) |

i te linijki trzeba również przepisać do

Kod:

| ![jakis tam text2](/img/2021/10/004.jakis-tam-text2.jpg#small) | ![jakis tam text3](/img/2021/10/005.jakis-tam-text3.jpg#small) |

Ktoś ma pomysł jak to hurtowo przerobić? xD

Offline

 

#2  2021-10-30 07:35:56

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: Poprawa plików tekstowych

Kod:

sed -i 's$cośtam$cośinnegotam$g' *

poleci po wszystkich plikach w katalogu.

Tylko wynik niektórych prób może nie być satysfakcjonujący, więc testuj na kopii najpierw.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2021-10-30 13:13:07

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

To chyba nie zadziała tak jak myślisz. xD

Offline

 

#4  2021-10-30 13:25:27

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: Poprawa plików tekstowych

Ja korzystam z tego:

Kod:

sed 's/frazaoryginalna/frazazamieniana/' wejsciowy.txt > wyjsciowy.txt

A tu masz skrypt bercika rozwijający to:
https://dug.net.pl/drukuj/58/masowa_edycja_duzej_il … w_tekstowych/

Offline

 

#5  2021-10-30 14:25:03

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

To przecie nie zadziała. xD Ja wiem, że gdyby każdy plik miał

Kod:

![](/img/2016/08/001.jakis-tam-text1.jpg#huge)

To bez problemu by szło przerobić do

Kod:

![jakis tam text1](/img/2016/08/001.jakis-tam-text1.jpg#huge)

Ale tutaj każdy plik ma ten kawałek inny i nawet w tym samym pliku jest kilka innych takich kawałków. Różnią się one tym co stoi po /img/ i nazwę takiego obrazka trzeba by wstawić między [ ], które jest wcześniej. Więc tutaj sam sed nie zdziała, bo trzeba trochę bardziej zaawansowanej magii. xD

Offline

 

#6  2021-10-30 14:49:29

  fnmirk - Redaktor

fnmirk
Redaktor
Zarejestrowany: 2008-02-19

Re: Poprawa plików tekstowych

morfik, ja raczej jestem odtwórcą gotowych skryptów. Może spróbuj skorzystać z generatora wyrażeń regularnych, aby opisać problem dla jakiegoś narzędzia.

Kod:

apt info rgxg

Offline

 

#7  2021-10-30 15:24:16

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

Kod:

echo '![](/img/2016/08/001.jakis-tam-text1.jpg#huge)' | sed -n 's/!\[.*](\/img\(.*\))/[\1]/p'

u mnie działa

Ostatnio edytowany przez numer_inaczej (2021-10-30 15:24:38)

Offline

 

#8  2021-10-30 20:43:28

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Nie działa. xD

Orginal był:

Kod:

![](/img/2016/08/001.jakis-tam-text1.jpg#huge)

Wyszło:

Kod:

[/2016/08/001.jakis-tam-text1.jpg#huge]

a miało być

Kod:

![jakis tam text1](/img/2016/08/001.jakis-tam-text1.jpg#huge)

Offline

 

#9  2021-10-31 09:05:19

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

Teraz zgodnie z oczekiwaniami:

Kod:

echo '![](/img/2016/08/001.jakis-tam-text2.jpg#huge)' | sed -n 's/!\[.*\](\(\(.*\)\.\(.*\)\.\(.*\)\))/![\3](\1)/p'

Ostatnio edytowany przez numer_inaczej (2021-10-31 10:10:08)

Offline

 

#10  2021-10-31 19:42:04

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Hmm, no wygląda, że robi co powinno przynajmniej ten kluczowy element, o który mi chodzi, resztę jakoś sobie ogarnę. xD

A mógłbyś mi jeszcze napisać co dokładnie robi ![\3](\1) ? xD

Ostatnio edytowany przez morfik (2021-10-31 19:45:42)

Offline

 

#11  2021-10-31 20:44:11

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

Zawartość nawiasów \(.*\) jest przywoływana w momencie postawienia \1 lub \3.
Są to tzw. odwołania wsteczne które określa nawias okrągły.

\1 - to zawartość Twego okrągłego nawiasu.
Kropki między wewnętrznymi nawiasami oddzielają interesujący Cię tekst.(2 i 3 - nawiasy wewnęrzne)

Offline

 

#12  2021-10-31 21:24:53

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

numer_inaczej napisał(-a):

Zawartość nawiasów \(.*\) jest przywoływana w momencie postawienia \1 lub \3.
Są to tzw. odwołania wsteczne które określa nawias okrągły.

\1 - to zawartość Twego okrągłego nawiasu.
Kropki między wewnętrznymi nawiasami oddzielają interesujący Cię tekst.(2 i 3 - nawiasy wewnęrzne)

Metodą prób i błędów doszedłem do tych samych wniosków. xD

Jest jednak jeden problem. Jak podam zawartość pliku, który ma coś na wzór ![](/img/2016/08/001.jakis-tam-text2.jpg#huge) i przepuszczę to przez twojego sed'a, to mam w zasadzie wyczyszczony plik, tj. jakakolwiek inna treść z tego pliku jest kasowana. W pliku zostają tylko uzupełnione linijki zawierające frazy podobne do tej powyżej. Jak usunę parametr -n z tego polecenia co dałeś, to nie czyści mi pliku z tekstu ale każda fraza jest zdublowana (jedna pod drugą), co wygląda mniej więcej tak:

Kod:

text text text text text text text text text text text text text text text text text 

![jakis-tam-text1](/img/2015/06/1.jakis-tam-text1.png#medium)
![jakis-tam-text1](/img/2015/06/1.jakis-tam-text1.png#medium)

text text text text text text text text text text text text text text

Jak to obejść? xD

Offline

 

#13  2021-10-31 22:01:38

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Ok dałem se radę chyba. xD

Zamiast:

Kod:

 sed -n 's/!\[.*\](\(\(.*\)\.\(.*\)\.\(.*\)\))/![\3](\1)/p'

dałem:

Kod:

 sed 's/!\[.*\](\(\(.*\)\.\(.*\)\.\(.*\)\))/![\3](\1)/g'

Offline

 

#14  2021-10-31 23:30:13

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

Tak, `g' to flaga global (p jest dla pojedynczego wiersza)

Offline

 

#15  2021-10-31 23:59:04

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

No pierwsza seria poszła. Trochę błędów miałem ale to przez literówki w tekście źródłowym ale przy okazji popoprawiałem wszystko. xD

Szkoda, że mi się zmienił styl pisania tekstów na przestrzeni lat i mam lekką niekonsekwencje w zapiskach.

Np. trzeba jeszcze teraz to przepisać:

Kod:

![](/img/2016/12/030-jakis-tam-text1.png#big)

Różni się on od tego poprzedniego tym, że tutaj po numerku stoi myślnik, a nie kropka i tak łatwo już chyba nie będzie? xD Tych fraz między myślnikami może być dowolna ilość (od kilku do kilkunastu).

Jakieś sugestie? xD

Offline

 

#16  2021-11-01 00:16:19

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

EDIT:

Kod:

echo '![](/img/2016/08/001-jakis-romek-tam-text1.jpg#huge)' | sed -n 's/!\[.*\](\/img\/\([0-9]*\/[0-9]*\/[0-9]*\)\-\(.*\)\.\(.*\))/![\2](\1-\2.\3)/p'

Tym razem trzeba było określić powtarzające się znaki cyfr `[0-9]' odzielone separatorem ukośnika.
Ażeby nie brał pod uwagę znaczenia specjalnego ukośnika, musimy poprzedzić go odwrotnym.

Uważaj na to, że dopasowania są 'zachłanne' - czyli jeśli są dwa zamknięte nawiasy, to będzie pożerał do max wysuniętego. Stąd takie manipulacje.

Ostatnio edytowany przez numer_inaczej (2021-11-01 00:46:48)

Offline

 

#17  2021-11-01 00:37:40

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Z tego co widzę, to wyszło:

Kod:

![jakis-romek-tam-text1.jpg#huge](2016/08/001-jakis-romek-tam-text1.jpg#huge)

A miało wyjść:

Kod:

![jakis-romek-tam-text1](2016/08/001-jakis-romek-tam-text1.jpg#huge)

tj.  bez tej końcówki: .jpg#huge

Ok, widzę, że poprawione już. xD

Ale teraz wychodzi:

Kod:

![jakis-romek-tam-text1](2016/08/001-jakis-romek-tam-text1)

Gdzieś wcięło: .jpg#huge

Ostatnio edytowany przez morfik (2021-11-01 00:40:06)

Offline

 

#18  2021-11-01 00:47:06

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

już jest, patrz wyżej :)

Ostateczna wersja daje:

Kod:

![jakis-romek-tam-text1](2016/08/001-jakis-romek-tam-text1.jpg#huge)

Ostatnio edytowany przez numer_inaczej (2021-11-01 00:49:58)

Offline

 

#19  2021-11-01 00:55:46

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

No wyszło bardzo podobnie: xD

Kod:

echo '![](/img/2016/08/001-jakis-romek-tam-text1.jpg#huge)' | sed -n 's/!\[.*\](\/img\/\([0-9]*\/[0-9]*\/[0-9]*\)\-\(.*\)\.\(.*\))/![\2](\1-\2.\3)/p'
echo '![](/img/2016/08/001-jakis-romek-tam-text1.jpg#huge)' | sed -n 's/!\[.*\](\/img\/\([0-9]*\/[0-9]*\/[0-9]*\)\-\(.*\)\.\(.*)\)/![\2](\1-\2\.\3/p'

Trochę się różnią ale dają ten sam efekt.

No ale grunt, że powoli zaczynam to łapać. xD

Ostatnio edytowany przez morfik (2021-11-01 00:57:41)

Offline

 

#20  2021-11-01 01:00:55

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

sorki, późno jest i mi się miesza, co ma być, czego nie :D zapomniałem o /img/ przed datą.

Kod:

echo '![](/img/2016/08/001-jakis-romek-tam-text1.jpg#huge)' | sed -n 's/!\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\-\(.*\)\.\(.*\))/![\3](\1\2-\3.\4)/p'

zwraca:

Kod:

![jakis-romek-tam-text1](/img/2016/08/001-jakis-romek-tam-text1.jpg#huge)

Ostatnio edytowany przez numer_inaczej (2021-11-01 01:06:25)

Offline

 

#21  2021-11-01 01:10:51

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Ta, zauważyłem w meld, że wcieło img. xD

Offline

 

#22  2021-11-01 02:36:38

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Dobra druga partia też jest z głowy. Została ostatnia. xD

Mamy linijki typu wcześniejszego w takim układzie:

Kod:

| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) |

Za cyferkami mogą występować kropki albo myślniki, tak jak wcześniej. Fraz typu ![](/img/2016/12/020.jakis-tam-text1.png#medium) w jednej linijce może być kilka ale nie mniej niż dwie. Na początku linijki i końcu jest znak pipe | oraz poszczególne frazy są nim od siebie oddzielone.

Trzeba to przerobić do poniższej postaci:

Kod:

| ![jakis-tam-text1](/img/2016/12/020.jakis-tam-text1.png#medium) | ![jakis-tam-text2](/img/2016/12/021.jakis-tam-text2.png#medium) |

Offline

 

#23  2021-11-01 03:34:05

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Zrobiłem coś takiego ale to nie jest za bardzo skalowalne. xD

Kod:

sed 's@| !\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\.\(.*\)\.\(.*\)) | !\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\.\(.*\)\.\(.*\))@| ![\3](\1\2.\3.\4) | ![\7](\5\6.\7.\8)@g'

sed 's@| !\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\-\(.*\)\.\(.*\)) | !\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\.\(.*\)\.\(.*\))@| ![\3](\1\2-\3.\4) | ![\7](\5\6-\7.\8)@g'

Ale łapie ten powyższy przypadek.

Dla 3 trzeba by dorobić kolejny człon i dla 4 jeszcze jeden ale to chyba nie tędy droga? xD

Offline

 

#24  2021-11-01 06:12:41

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Poprawa plików tekstowych

Mam takie pytanie: dlaczego to poniższe:

Kod:

$  echo '| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | ![](/img/2016/12/022.jakis-tam-text3.png#medium) |' | sed  's@^| !\[.*\](\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\.\(.*\)\.\(.*\)) |$@| ![\3](\1\2.\3.\4) |@'

zwraca taki wynik?

Kod:

| ![jakis-tam-text3](/img/2016/12/022.jakis-tam-text3.png#medium) |

a nie:

Kod:

| ![jakis-tam-text1](/img/2016/12/020.jakis-tam-text1.png#medium) |

albo

Kod:

| ![jakis-tam-text1](/img/2016/12/020.jakis-tam-text1.png#medium) | ![jakis-tam-text2](/img/2016/12/021.jakis-tam-text2.png#medium) | ![jakis-tam-text3](/img/2016/12/022.jakis-tam-text3.png#medium) |

Offline

 

#25  2021-11-01 10:26:59

  numer_inaczej - Użytkownik

numer_inaczej
Użytkownik
Zarejestrowany: 2014-08-15

Re: Poprawa plików tekstowych

Wydaje mi się, że:
- pierwotnie założyłem, że nawias kwadratowy [] może zawierać jakiś tekst  - umieszczając wewnątrz .*
- przy większej ilości musimy zdjąć specjalne znaczenie nawiasu poprzedzając go ukośnikiem \[\], wcisnąć go w zakres jaki może się powtórzyć [\[\]] i określić znakiem +, że może się powtórzyć 1 lub więcej razy

czyli powinno być:

Kod:

echo '| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | ![](/img/2016/12/022.jakis-tam-text3.png#medium) |' | sed 's@^| ![\[\]]+(\(\/img\/\)\([0-9]*\/[0-9]*\/[0-9]*\)\.\(.*\)\.\(.*\)) |$@| ![\3](\1\2.\3.\4) |@'

co daje nam:

Kod:

| ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | ![](/img/2016/12/022.jakis-tam-text3.png#medium) |

Wiem, że jest to punktem takim newralgicznym zapisu, jednak głowy nie dam uciąć że tak to jest jak określiłem

Ostatnio edytowany przez numer_inaczej (2021-11-01 11:40:42)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)