On Sun, Jul 04, 2004 at 08:12:49PM +0300, Dimitar Terziev wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Ситуацията е следната:
> Samba сървър, за около 40 клиенти, като не е желателно в него да се "ровят" 
> външни хора (мрежата е с няколко хиляди потребители).
> 
> Поради някои изисквания - не може да има пароли на папките.
> Направил съм firewall с iptables, като съм описал кои ip адреси имат достъп до 
> сървъра.
> Отделоно, има един файл - /etc/macs, в който са описани MAC адресите 
> (във вида IP MAC ). (в случая не е удобно да записвам маковете в правилата на 
> iptables).
[snip]
> Значи, от mysqldump получавам следните записи:
> '212.116.157.11','00:02:02:02:02:02'
> '1.1.1.1','11:11:11:11:11:11'
> '2.3.4.5','31:16:10:31:41:12'
> 
> въпроса ми е - как да кажа на sed или awk да вземе всичко, без ' и ,
> и да се получи това:
> 
> 212.116.157.11 00:02:02:02:02:02

Виждам, че доста хора вече са отговорили - което може да се очаква, при
положение, че три-четири дни не пипах изобщо компютър, да не говорим за
Интернет :)  Но все пак, в духа на TMTOWTDI, нужно ли е наистина да
parse-ваш изхода от mysqldump, ако можеш да убедиш command-line клиента
да ти свърши работата? :)

Ако таблицата ти изглежда по начин, подобен на този...

| macs  | CREATE TABLE `macs` (
  `ads` char(20) NOT NULL default '',
  `mac` char(20) NOT NULL default ''
) TYPE=MyISAM |

...то можеш да направиш нещо като това :)

[EMAIL PROTECTED] ~]> mysql -BNe 'select concat(ads, " ", mac) from macs' test
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[EMAIL PROTECTED] ~]>

Дори опцията -B не ти е непременно нужна, ако пренасочиш изхода на mysql
клиента към файл или pipe:

[EMAIL PROTECTED] ~]> mysql -Ne 'select concat(ads, " ", mac) from macs' test > foo
[EMAIL PROTECTED] ~]> cat foo
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[EMAIL PROTECTED] ~]>

...и няма нужда нито от sed, нито от awk :)

А ако все пак настояваш...

[EMAIL PROTECTED] ~]> cat foo
'212.116.157.11','00:02:02:02:02:02'
'1.1.1.1','11:11:11:11:11:11'
'2.3.4.5','31:16:10:31:41:12'

Това е изходният файл във формат, подобен май на това твоето.
Убеждаваме awk да приема и апостроф, и апостроф-запетая-апостроф за
field separators:

[EMAIL PROTECTED] ~]> awk -F"'(,')?" '{print $2 " " $3}' foo
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[EMAIL PROTECTED] ~]>

Voila! :)  Но според мен решението с mysql -N и concat е малко
по-добро...

Поздрави,
Петър

-- 
Peter Pentchev  [EMAIL PROTECTED]    [EMAIL PROTECTED]    [EMAIL PROTECTED]
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
This sentence contains exactly threee erors.

Attachment: pgpn93ZKrIKeh.pgp
Description: PGP signature

Reply via email to