请Unix Shell高手指点
假设一文本文件为data.src,内容如下:
fsahifshfsasHELLOaffasnfksafsafwiWORLDqhtfriowqht wnfklwnkfqwfnkfdsfm :<>Fafsafkslfsa:Fsafjkwerqrweqrffw:Fsafnsafask
fsafsafsa:fsafnksfsafsajkfjkwjqfwmafmsafsa:Fsafnkfa,.dsafsjkfsa,.JKDAS:fsafsjafAHKFASKf
fasfnksnfksaHELLOfm,mfsaf::::F:SAfsafnsafsWORLDafsafsa,.vdvjkfejfrHELLOewasfs>FSAf;s'afsafjlkKFA23i24mlfsafmlfaio***********rwjk234jk24ji24uiuuifusaif fisa juWORLDfisuaifuiUIUOFOAjorwHELLOrmlWORLDwmfsdfipoPPrqwermpHELLOrmlWORLD
请问怎么编写Shell脚本,提取文件中HELLO和WORLD之间的内容,然后全部写入一个文件data.out中,如果提取内容相同的只记录一次。
期望的data.out文件如下:
TEXT:affasnfksafsafwi
TEXT:fm,mfsaf::::F:SAfsafnsafs
TEXT:ewasfs>FSAf;s'afsafjlkKFA23i24mlfsafmlfaio***********rwjk234jk24ji24uiuuifusaif fisa ju
TEXT:rml
希望高手指点,最好调试通过后贴出来,多谢了。
参考答案:尚未调好,先这样交卷吧。虽是PERL,不过它倒也很强,而且在各种UNIX 下都有。你可以用perl -V 命令看你那里是否安装了。
#!/usr/bin/perl
$eingabe="data.src";
$ausgabe="data.out";
$prefix = "HELLO"; $surfix = "WORLD";
open(EIN, "<$eingabe") or die "Kann $eingabe nicht oeffnen: $!\n";
open(AUS, ">$ausgabe") or die "Kann $ausgabe nicht oeffnen: $!\n";
while (<EIN>) {
while (/HELLO.*WORLD/) {
$string = $_;
$string = s/\G.*$prefix(.*)$surfix/$1/;
print "Text: " . $1 . "\n";
$_ = $string;
}
}
close EIN;
close AUS;