2010-12-20 15 views
6

Greetz ludzie.Powłoki równoważne z PHP preg_replace()

Szukam sposobu na wykonanie tych samych rzeczy, co w przypadku robaka PHP preg_replace() (wyszukanie tekstu pasującego do wyrażenia regularnego i zastąpienie go) w skrypcie powłoki.

Rozważmy następujący plik.

<a href="http://example.com/">Website #1</a> 
<a href="http://example.net/">Website #2</a> 
<a href="http://example.org/">Website #3</a> 

I chcę uzyskać to:

http://example.com/ 
http://example.net/ 
http://example.org/ 

Czy istnieje sposób, aby to zrobić? Dzięki.

+0

Twój tekst różni się od przykładu. Czy chcesz wyodrębnić część (y) twoich łańcuchów (jak w przykładach) lub czy chcesz ją zastąpić czymś? – plundra

+1

Ponadto, [nie parsuj HTML za pomocą wyrażeń regularnych] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) (w generał). – delnan

+0

Jeśli powiesz: "Więc rozważ następujący plik.", Wtedy ludzie będą zakładać, że to dane. Zadaj właściwe pytanie następnym razem. – Anders

Odpowiedz

9

Można użyć sed jak:

sed -r 's/.*href="([^"]*)".*/\1/' file 

See it

+0

Świetnie, dzięki! Zakładam więc, że 's' mówi sedowi, aby użył regex, ale do czego służy' \ 1/'? – seriousdev

+0

Nie, 's' jest zamiennikiem, a' \ 1' jest pierwszym dopasowaniem (grupa nie ma pewności co do tego terminu), przy czym 1 jest zawartością pierwszego nawiasu. '[^"] * 'w powyższym przykładzie: – plundra

+0

@plundra Dziękuję. – seriousdev

0

Podczas sed doskonale nadaje się, nie pozwalają na więcej niż 9 odwołania wstecznego. Perl robi:

echo "a b c d e f g h i j k l m n o p q r s t u v w x y z" | \ 
    perl -lpe 's/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/$1;$2;$3;$4;$5;$6;$7;$8;$9;$10;$11;$12;$13;$14;$15;$16;$17;$18;$19;$20;$21;$22;$23;$24;$25;$26/g' 
a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z 

To (niemy) przykład pokazuje, że to możliwe, aby przejść dalej niż sed „s \9