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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Tam w nawiasie kwadratowym bazowo nie ma żadnego tekstu, a jedynie trzeba go tam wpisać.
Ten twój sed nie uzupełnia tych nawiasów — wygląda jakby nie było żadnego dopasowania.
Popytałem trochę na stackoverflow i tam podsuneli mi takiego sed'a:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1\3\2#g'
Co daje bardzo pożądany efekt,
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#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1\3\2#g' | ![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) |
choć muszę jeszcze ustalić jak to zapuścić jedynie na linijkach, które zaczynają się od | ![] , bo wygląda, że trochę przepisuje za dużo. xD
Offline
cieszy mnie to, że udało Ci się rozwiązać problem.
Offline
Problem dalej jest nierozwiązany. xD
Bo o ile tamten sed działa to trzeba go będzie przerobić.
Do tej pory używałem np. takiego polecenia:
egrep -ir "^\!\[\]\(" post/ | \ cut -d: -f 1 | \ sort -u | \ xargs sed -i 's@^!\[.*\](\(\(.*\)\.\(.*\)\.\(.*\)\))@![\3](\1)@g'
I tutaj w sed jest ^ zaraz za @ i to robiło dopasowanie tylko do tych konkretnych linijek.
Ale w przypadku tego sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1\3\2#g' , tak łatwo się nie da. xD
Offline
Póbuję rozwikłać ten cały zapis \([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\) ale coś mi to nie idzie. xD
To polecenie:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1\3\2#g''
bez problemu działa z
| ![](/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) | | ![](/img/2016/12/020.jakis-tam-text1.png#medium) | ![](/img/2016/12/021.jakis-tam-text2.png#medium) | | ![](/img/2016/12/020.jakis-tam-text1.png#medium) |
Czyli ten sed sobie poradzi bez względu na to ile takich fraz będzie.
Dla uproszczenia spróbowałem z tą pojedynczą frazą, tj.
| ![](/img/2016/12/020.jakis-tam-text1.png#medium) |
No i wyszło:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1\3\2#g' | ![jakis-tam-text1] ![](/img/2016/12/020.jakis-tam-text1.png#medium) |
Ale jak zacząłem sprawdzać co tam się kryje pod tymi \1 \2 \3 , to wychodzi coś takiego:
sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\1#g' | ![ | sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\2#g' ](/img/2016/12/020.jakis-tam-text1.png#medium) | sed 's#\([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\)#\3#g' jakis-tam-text1 |
I się tak zastanawiam czemu tak dziwnie to dopasowuje.
Może dałbyś radę wyjaśnić co \([^[]*.\)\([^\.]*.\([^\.]*\)[^)]*.\) dokładnie robi? xD
Offline
Ok udało się. xD
Zgodnie z tym wyjaśnieniem, wyszedł taki sed:
sed '/^|[[:space:]]!\[](/s#\(|[[:space:]]!\[\)\(]([^().]*\.\([^|.]*\)\.[^()]*)\)#\1\3\2#g'
No i on już złapał te linijki które były potrzebne.
Potem w oparciu o tamto wytłumaczenie zrobiłem jeszcze takiego sed'a, który łapał linijki z myślnikami zamiast z kropkami:
sed '/^|[[:space:]]!\[](/s#\(|[[:space:]]!\[\)\(]([^()-]*\-\([^|.]*\)\.[^()]*)\)#\1\3\2#g'
I w końcu udało się przerobić wszystkie linijki tak jak być powinny. xD
Offline