Portál AbcLinuxu, 25. dubna 2024 10:04
sed 's/vyraz1\{x\}/vyraz2/g'ale to nefunguje. Nevite mi nekdo prosim poradit. diky
sed 's/\(vyraz1\)\{x\}/vyraz2/g'
sed 's/\(vyraz1\)\{x\}/vyraz2/g'
nepomohlo, resp. nic nezamenilo. V cem je problem?
sed 's/\(Na\)\{45\}/ K/g' ala10_nacl.pdb > pokus
sed '-e s/výraz/náhrada/'{,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,}mi taky nepomohlo bez ohlkadu na pocet carek
ATOM 15040 Na Na 5012 36.160 49.470 53.120 1.00 0.00 ATOM 15041 Na Na 5013 24.520 52.110 42.150 1.00 0.00 ATOM 15042 Na Na 5014 51.240 1.070 22.880 1.00 0.00 ATOM 15043 Na Na 5015 51.240 1.070 41.500 1.00 0.00 ATOM 15044 Na Na 5016 0.710 52.110 11.040 1.00 0.00 ATOM 15045 Na Na 5017 37.510 53.200 19.790 1.00 0.00 ATOM 15046 Na Na 5018 1.610 47.900 27.350 1.00 0.00 ATOM 15047 Na Na 5019 43.140 52.110 23.530 1.00 0.00 ATOM 15048 Na Na 5020 37.510 53.200 38.410 1.00 0.00 ATOM 15049 Na Na 5021 1.610 47.900 45.970 1.00 0.00 ATOM 15050 Na Na 5022 43.140 52.110 42.150 1.00 0.00 ATOM 15051 Cl Cl 5023 10.130 1.050 17.700 1.00 0.00 ATOM 15052 Cl Cl 5024 9.030 0.860 1.330 1.00 0.00 ATOM 15053 Cl Cl 5025 3.900 17.410 15.600 1.00 0.00 ATOM 15054 Cl Cl 5026 8.590 13.740 0.160 1.00 0.00 ATOM 15055 Cl Cl 5027 10.010 53.925 11.540 1.00 0.00 ATOM 15056 Cl Cl 5028 10.130 1.050 36.320 1.00 0.00
awk
…
{ if (n < 45) n += gsub(/a/, "ble") print }Teda nic moc, protože se na řádku, kde to překročí 45 výskytů, nahradí všechny. Lze se tomu vyhnout, ale sehlaly mi už tři teorie, co vlastně chceš, takže se nebudu pouštět do větších akcí...
awk '{while (i < 45 && sub("Na", " K")) i++; print; }'sub() vrací 1 pokud se provedla substituce. Má to zase ten problém, že náhrada nesmí jít nahradit podruhé.
#/usr/bin/python import re, sys r = re.compile(r'vyraz') repl = 'replacement' m = 13 n = 0 for line in sys.stdin: if n < m: i = len(r.findall(line)) line = r.sub(repl, line, max(i + n - m, 0)) n += i sys.stdout.write(line)
perl -pe 'next if $a>45; while ($a++ <45 and s/vyraz/replacement/){};'
perl -pe 'next if $a>=45; while ($a++ <45 and s/vyraz/replacement/){};a nebo
perl -pe 'next unless $a<45; while ($a++ <45 and s/vyraz/replacement/){};
perl -pe '$a++ while $a<45 and s/vyraz/replace/'
perl -pe '$l=0; while($a<45 and substr($_,$l) =~ s/vyraz/replace/){$a++; $l=length($_)-length($'\'')}'
Hodně skriptů pro práci s PDB soubory je napsáno v Perlu. I původní PDB databáze z BNL byla napsána z 90% v Perlu. Při zpracování PDB souborů se lítají regulárními výrazy jen za druhým a Perl je v tomto prvotřídní.
Co se týče otázky tutoriálu Perlu bych zkusil třeba tady:
http://docs.linux.cz/programming/interpreted/perl/
nebo si vyberte ve studnici vědění
google: perl tutorial site:cz
google: perl pdb basic
http://www.perlmol.org/
...
tj
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.