Autor Tema: grep regex replace (all)  (Posjeta: 2131 )

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
grep regex replace (all)
« : 09 Studeni 2013, 01:05:14 prijepodne »
Uvijek zaboravim regexe. Pišem podsjetnik.
http://en.wikipedia.org/wiki/Regular_expression
Ovaj put je nekom zatrebalo za Find/Replace u programu Sigil.
http://en.wikipedia.org/wiki/Sigil_%28application%29

Hrpa teksta s podbilješkama. Tekst:
… nešto[153]. Nešto …

153 ^ Podbilješka, fusnota…

Tekst zalijepljen u WYSIWIG prozor programa Sigil. Potom otvoren prozor s xhtml kôdom:
<p>…… nešto[153]. Nešto …</p>

<p>153 ^ Podbilješka, fusnota…</p>

Treba zamijeniti sve oznake u tekstu/kôdu među uglatim zagradama xhtml kôdom za reference i podbilješke sličnim onima na Wikipediji (u ovom slučaju su uglate zagrade u tekstu rezervirani znakovi samo za reference, ne koriste se ni za što drugo kao ni znak ^)
<p>…… nešto<a href="#f153" id="r153">[153]</a>. Nešto …</p>

<p>153 <a href="#r153" id="f153">^</a> Podbilješka, fusnota…</p>

Zamjena oznaka u tekstu. Find:
\[(.*?)\]Replace (all):
<a href="#f\1" id="r\1">[\1]</a>
Zamjena oznaka u podbilješkama:
Find:
<p>(.*?) \^Replace (all):
<p>\1 <a href="#r\1" id="f\1">^</a>
« Zadnja izmjena: 09 Studeni 2013, 01:11:52 prijepodne glonga »

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
Odg: grep regex replace (all)
« Odgovori #1 : 12 Ožujak 2016, 00:36:13 prijepodne »
kad pdf smrlja tablice
kad npr. Ctrl+C i Ctrl+V redka tablice od tri stupca rezultira s tri redka teksta u uređivaču teksta
3u1
3 redka u jedan, razdvojeno zarezom
iz datoteke u terminal^
$ while read line1; do read line2; read line3; echo "$line1,$line2,$line3"; done < infile.txt
2u1
2 redka u 1, razdvojeno zarezom
u datoteci, find/replace(grep) za slučaj unix preloma (newline, linefeeed, LF)^
find
(\n.*]\nreplace all
\1,ovo gornje, po potrebi dodati prazan redak na početku datoteke

prijelom redka na mjestu gdje se miješaju znamenke i velika slova, jednostavno
find
([0-9])([A-Z])replace all
([0-9])\r([A-Z])
ako redci (slogovi podataka) završavaju znamenkama, a novi počinju slovima (malim), dodavanje brojeva koji su 'pobjegli' u novi redak
find
([a-z])\rreplace all
\1
glupo, ali lakše je da editor pamti, a ovaj pamti samo grep, ne i obične find/replace, npr. zamjena bjeline zarezom u grep verziji
find
[[:blank:]]replace all
,
.csv ili izravno Ctrl+A Ctrl+C Ctrl+V zalijepit u tablični kalkulator, većina ih sam predloži zarez za separator
« Zadnja izmjena: 12 Ožujak 2016, 00:41:35 prijepodne glonga »

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
Odg: grep regex replace (all)
« Odgovori #2 : 13 Ožujak 2016, 01:43:29 prijepodne »
Ovaj regex s klasama bolje lomi redke na spoju velikog slova i broja u odnosu na ono iz prethodnog upisa (korak manje u tvom primjeru)
find
([[:digit:]])([[:upper:]])replace all
\1\n\2
Oni prijelomi u pola riječi - redci počinju velikim slovima pa priključiš prethodnom redku redak koji počinje malim slovom, dodaj u niz 'filtera'
find
\n([[:lower:]])replace all
\1
« Zadnja izmjena: 13 Ožujak 2016, 02:08:16 prijepodne glonga »

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
neregularno
« Odgovori #3 : 13 Ožujak 2016, 11:50:36 prijepodne »
Umjesto bjeline ili prijeloma redka iza riječi Riječ postaviti zarez?
Ne radi?
Wikipedija veli:
». - Matches any single character (many applications exclude newlines, and exactly which characters are considered newlines is flavor-, character-encoding-, and platform-specific, but it is safe to assume that the line feed character is included).«
https://en.wikipedia.org/wiki/Regular_expression
Izgleda da nije sigurno ni za LF, a za CR i CRLF sigurno nije, zato bi ovo trebalo radit svagdi
find
Riječ[^A-Za-z0-9_]replace all
Riječ,
« Zadnja izmjena: 13 Ožujak 2016, 11:52:08 prijepodne glonga »

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
sh it happens
« Odgovori #4 : 13 Ožujak 2016, 13:22:16 poslijepodne »
Sigurnije na pogreške, za 'ručne' popravke
find
(Riječ)[^A-Za-z0-9_]replace all
\1,

Offline glonga

  • Forumska Al-tipkovnica
  • Gožđeno pero foruma
  • ***
  • Postova: 10.154
grep div tag
« Odgovori #5 : 24 Ožujak 2016, 13:58:23 poslijepodne »
Primjeri uporabe patterm modifier-a^ su rijetki online.^
Blogger/blogspot blog i njegov html editor znaju poprilično smrljat html kôd.
Problem s div html tag-om je taj što se najčešće provlači kroz više redaka, a može bit i ugniježđen.
Obostrano poravnat tekst u html-u je možda lijep, ali je teže čitljiv.
Kako maknut div tag za npr. obostrano poravnanje (u slučaju kad je lijevo poravnanje default)?
find
<div style="text-align: justify;">((?s).*?)</div>replace all
\/1