Nalezení řádek s „jiným obsahem než“

Jiří Veruněk

Nalezení řádek s „jiným obsahem než“
« kdy: 26. 10. 2011, 12:16:20 »
Mám následující textový soubor:

abc
DEFG: 123
ghi

F

abc
DEFG: 123
hijk

F

abc
DEFG: 456
hij

(znak F je formfeed, slouží jako oddělovač záznamů.)
Víte někdo, jak najít všechny záznamy, s "DEFG" jiným než 123?


Chci v podstatě inverzi tohoto:
grep -B3 -A3 -U "DEFG: 123"
 - najde řádek s "DEFG: 123" a vypíše ho spolu se 3 předchozími a 3 následujícími řádky.
(grep -v -B3 -A3 -U "DEFG: 123"   je nesmysl)


Pokud by vše bylo na jednom řádku, mohl bych použít:
  sed 's/F[^F]*DEFG: 123[^F]*F/F/g'
Standardně sed načte pouze 1 řádek vstupního souboru, pro multiline pattern space lze nějak použít příkazy N, D, P, ale nedaří se mi to.

Zatím to zkouším v grep a sed z UnxUtils.
Mohlo by to být něco ve stylu tohoto:
  sed "/^F$/{ N .... }"


Děkuji za pomoc.
« Poslední změna: 26. 10. 2011, 12:29:15 od Petr Krčmář »


Tomáš

Re: Nalezení řádek s „jiným obsahem než“
« Odpověď #1 kdy: 26. 10. 2011, 13:02:49 »
Kód: [Vybrat]
cat src.txt | ruby -e 'puts STDIN.readlines.map(&:strip).inject([[]]) { |arr, line| (line == "F") ? (arr << []) : (arr.last << line); arr }.delete_if { |block| block.include? "DEFG: 123" }'

pet

Re: Nalezení řádek s „jiným obsahem než“
« Odpověď #2 kdy: 26. 10. 2011, 13:21:46 »
Pomoci tr preved novy radek na nejaky vhodny znak a FF na novy radek. pak pouzij grep a nakonec to pomoci tr preved zpet ;-)

jirik

Re: Nalezení řádek s „jiným obsahem než“
« Odpověď #3 kdy: 26. 10. 2011, 13:50:46 »
prikaz:
Kód: [Vybrat]
egrep -B3 -A3  "DEFG: [^1][^2][^3]" filevystup:
Kód: [Vybrat]
F

abc
DEFG: 456
hij

deadmail

Re: Nalezení řádek s „jiným obsahem než“
« Odpověď #4 kdy: 26. 10. 2011, 21:32:12 »
prikaz:
Kód: [Vybrat]
egrep -B3 -A3  "DEFG: [^1][^2][^3]" file

nebude fungovat ... DEFG: 111

Ak grepom, tak potom:
Kód: [Vybrat]
egrep -C 3  "DEFG: ([^1]|1[^2]|12[^3])" subor