Portál AbcLinuxu, 10. května 2025 05:27
sed s/---.*//NN
^.*?---Pokud můžete použít Perlovská rozšíření regulárních výrazů, konkrétně vyhlížení, použijte:
^.*?(?=---)Regulárnímu výrazu pak bude odpovídat jen ten text před pomlčkami. Syntaxe regulárních výrazů se liší, někde bude potřeba tu hvězdičku a otazník escapovat zpětným lomítkem. Taky si nejsem jist, zda "syté" regulární výrazy (
*?
, znamená to, že je snaha najít co nejkratší shodu) fungují všude.
^
znamená začátek řetězce, .
jakýkoli znak, *
libovolný počet opakování (0 až nekonečno, + by znamenalo 1 až nekonečno), ?
za *
změní režim z hladového na sytý (hladový hledá nejdelší shodu, sytý nejkratší). Výraz (?=...)
znamená vyhlížení, tj. porovnává se shoda další části textu, ale ta už se nepovažuje za součást nalezené shody.
Ze vstupu
lasj---asklhgdtedy první výraz vrátí
lasj---druhý pak
lasj
use strict;
use warnings;
use 5.010;
my $text = 'erwerefsdfsdfsdf---sfdsf';
$text =~ s/^(.*?)---/$1/;
say $text;
use strict;
use warnings;
use 5.010;
my $text = 'erwerefsdfsdfsdf---sfdsf';
($text) = $text =~ /(.*?)---/;
say $text;
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.