Portál AbcLinuxu, 7. listopadu 2025 05:59
1 .. ahoj .. 2 .. .. .. 1 .. cau .. 2 ..------------------------------------------------------------------
.. jsou nejake radky, obecne nevim kolik
chtela bych vytisknout casti mezi 1-2 ktere obsahuji ahoj
awk '/1/,/2/ {print}' umim
ale jak vytisknout jen ty co obsahuji ahoj?
diky Terka
grep, ale i na grep
:
$ cat soubor.txt | sed -n '/1/,/2/ p' | grep ahoj
ahoj
$ cat soubor.txt | awk '/1/,/2/ {print}' | grep ahoj
ahoj
PS: Ten cat tam je "na víc" ...
awk '/1/,/2/ {if(match($0, "ahoj")) print;}'
ruby -e 'STDIN.read.scan(/^1$.*?^2$/m).grep(/ahoj/).each{|x|puts x}'
Nicméně základní myšlenka by snad měla fungovat všude, kde jsou k dispozici víceřádkové regexpy. Prostě nejdřív vyjmu všechny výchozí skupiny "vocaď pocaď" (tady mezi jedničkou a dvojkou) a pak z nich vyďobu jen ty, co vyhoví podmínce.
#!/usr/bin/awk -f
BEGIN { data=""; willprint=0; }
/1/ { data=""; willprint=0; next; }
/2/ { if ( willprint == 1 ) print data; next; }
/ahoj/ { willprint=1; next; }
{ data=data $0 "\n"; next;}
cat $1|\
awk '/1/,/2/ {spoj=spoj $0 "\n"}
{ if (spoj~"1" && spoj~"ahoj" && spoj~"2")
{
{print spoj}
{spoj=""}
}
}
'>out
diky vsem!
Terka
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.