Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jiří Veruněk 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.
-
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" }'
-
Pomoci tr preved novy radek na nejaky vhodny znak a FF na novy radek. pak pouzij grep a nakonec to pomoci tr preved zpet ;-)
-
prikaz:
egrep -B3 -A3 "DEFG: [^1][^2][^3]" file
vystup:
F
abc
DEFG: 456
hij
-
prikaz:
egrep -B3 -A3 "DEFG: [^1][^2][^3]" file
nebude fungovat ... DEFG: 111
Ak grepom, tak potom:
egrep -C 3 "DEFG: ([^1]|1[^2]|12[^3])" subor