insert into ali_zeus_access_area
select * from ali_zeus_access_area@zeus_dev;
script -q tty.log
sqlplus /nolog
conn rnd/mCQe88il@crmintsb
conn rnd/mCQe88il@crmint
scp tty.log guangyan.lingy@10.20.130.14:/home/guangyan.lingy/tty0601.log
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
sqlplus rnd/mCQe88il@crmg
for remote in \
172.16.131.47 172.16.131.48 172.16.131.49 172.16.131.50 172.16.131.51 172.16.131.52 172.16.131.53 172.16.131.54 172.16.131.55 172.16.131.2 172.16.131.3 172.16.131.4 172.16.131.5 172.16.131.6 172.16.131.7 172.16.131.41 172.16.131.42 172.16.131.56 172.16.131.57 172.16.131.58 \
;do echo $remote; ssh $remote "grep 'sms webService visitor IP is' output/logs/user/martini_sales_tool.log"; done
daisy.louy
louying
carvin hello123
http://svn.alibaba-inc.com/repos/crm/martini/branches/20091209_dcs_guangyan.lingy_dev
weiming.shi
jinbo.yu
1234567890 alibaba-guest
我刚åˆè¯•äº?/p>
ä¸å›½çš„å大宜居å°åŸ?ä¸åˆçš„æ—¶å€™çœ‹çš?br />
http://focus.news.163.com/10/0531/09/680LGN5L00011SM9.html
有泉�)
æ•°æ®æ¨¡åž‹èµ„æºæ‰‹å†Œ
需è¦ä½ŽçƒŸæ— å¤é˜»ç‡ƒç”µ¾~†æ–™çš„电¾~†ä¼ä¸?/p>
在Fedoraä¸vim的酾|®æ–‡ä»¶å˜æ”‘Öœ¨/etc目录ä¸ï¼Œé…置文äšgå䨓vimrc
在终ç«?输入以下命ä×oæ¥ç¼–辑vimrcé…置文äšgåQ?br />
sudo vim /etc/vim/vimrc
或�sudo gedit /etc/vim/vimrc
1ã€æ˜¾½Cø™¡Œå?br />
åœ¨æ–‡ä»¶æœ«ç«¯æ·»åŠ ä¸€æ–°è¡ŒåQŒè¾“å…?set nu
2ã€è¯æ³•高äº?br /> åœ¨æ–‡ä»¶ä¸æ‰‘Öˆ° "syntax on ˜q™ä¸€è¡Œï¼ŒåŽÀLމå‰é¢çš„åŒå¼•å·"åQŒåŒå¼•å·æ˜¯æ³¨é‡Šçš„æ„æ€?/p>
3ã€è‡ªåŠ¨ç¾ƒ˜q?/p>
在文件末ž®¾æ·»åŠ ä¸€è¡Œï¼Œè¾“å…¥ set autoindent
åœ¨æ·»åŠ ä¸€è¡Œï¼Œè¾“å…¥ set cindent
å…¶ä¸ autoindent 是自动羃˜q›ï¼› cindent是特别针å¯?Cè¯è¨€è¯æ³•自动¾~©è¿›
注æ„åQšå¦‚果设¾|®å¥½ä»¥ä¸Šè®„¡½®åŽï¼ŒVIMæ²¡æœ‰ä½œå‡ºç›¸åº”çš„åŠ¨ä½œï¼Œé‚£ä¹ˆè¯·ä½ æŠŠä½ çš„VIMå‡çñ”到最新版åQŒä¸€èˆ¬åªè¦åœ¨¾lˆç«¯è¾“入以下命ä×oå›_¯åQšsudo apt-get install vim
¼œå¤§å®¶ä‹É用VIM愉快åQ?/p>
下é¢å‘Šè¯‰å¤§å®¶æ€Žä¹ˆåœ¨linux下å¦ä¹ CåQŒC在linux下的¾~–译器是gccåQŒä½ 在终端用vim输入Cçš„æºç ?/p>
如下ä¿å˜åˆ°hello.cç„¶åŽåœ¨å‘½ä»¤è¡Œ˜q行åQ?/p>
åQ?gcc hello.c -o hello
˜q™æ ·ä¼šç”Ÿæˆä¸€ä¸ªhelloçš„å¯æ‰§è¡Œæ–‡äšgåQŒåœ¨å‘½ä×o行里输入åQ?/p>
åQ?./hello
ž®Þpƒ½˜qè¡Œåˆšåˆšä½ ç¼–è¯‘çš„Cæºç äº?/p>
linuxä¸‹åŒæ ·ä¹Ÿèƒ½ç¼–译C++åQŒlinux下C++¾~–译器是gåQ‹ï¼‹åQŒç‰¹åˆ«æ½Cºï¼š
C++的头文äšg是iostream䏿˜¯iostream.hå¦å¤–˜q˜éœ€åР入命å½Iºé—´stdåQŒä¾‹å¦‚:
//hello.cpp
#include <iostream>
using namespace std;
int main ()
{
cout<<"helloworld!"<<endl;
}
˜q™æ ·æ‰èƒ½æ£å¸¸¾~–译åQŒåœ¨è¯¥ç›®å½•下åQŒç»ˆç«¯è¾“入:
# g++ hello.cpp -o hello
˜q™æ ·ž®Þq”Ÿæˆä¸€ä¸ªhelloçš„å¯æ‰§è¡Œæ–‡äšgåQŒåŒæ ?/hello命ä×o˜q行å®?/p>
本文æ¥è‡ªCSDNåšå®¢åQŒè{è½½è¯·æ ‡æ˜Žå‡ºå¤„åQšhttp://blog.csdn.net/Dreamcode/archive/2009/05/11/4166995.aspx
[root@localhost opt]# cat /home/autoBackup/ora_env
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/10.2.0
export ORACLE_SID=STAPLES
export ORACLE_TERM=xterm
#export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jlib
export JAVA_HOME=$ORACLE_HOME/jdk
export ORA_NLS10=$ORACLE_HOME/nls/data
export LC_CTYPE=en_US.UTF-8
[root@localhost opt]# cat /opt/backup_exp.sh
#!/bin/sh
#CREATORåQšdaimin
#functionåQšbackup database with expdp
#usageåQšcrontab on linux
#last modifyåQštuolei 2007-08-29 create
#set environment variable
. /home/autoBackup/ora_env #讄¡½®exp的环境å˜é‡?br />
#开始备份,å‡å®šç›®å½•backupPathå·²ç»åˆ›å¾åQŒåƈ且backupPath=/opt/oracle/backup
backupPath='/opt/oracle/backup/'
FILE=`date +%Y%m%d`'.dmp'
LOGFILE=`date +%Y%m%d`'.log'
exp daimin/daimin@STAPLES file=$backupPath$FILE.dmp log=$backupPath$LOGFILE
#åˆ é™¤ä»¥å‰˜q‡æœŸçš„备ä»?br /> find /opt/oracle/backup/* -name "*.dmp" -mtime +4 -exec rm {} \;
[root@localhost etc]# crontab -e
0 19 * * * /opt/backup_exp.sh > /opt/oracle/backup/logs/backup_exp.log 2>&1
~
"crontab.XXXXmfkudb" 1L, 76C written
crontab: installing new crontab
[root@localhost etc]# crontab -l
0 19 * * * /opt/backup_exp.sh > /opt/oracle/backup/logs/backup_exp.log 2>&1
注æ„åQ?br />
1ã€?opt/backup_exp.sh需è¦å…·æœ‰å¯æ‰§è¡Œæƒé™åQŒæ‰å¯ä»¥è¢«root用户执行
[root@localhost backup]# chmod +x /opt/backup_exp.sh
å¦åˆ™ä¼šå‡ºçŽ?bin/sh: /opt/backup_exp.sh: Permission denied错误
2ã€éœ€è¦åœ¨è„šæœ¬çš„ç¬¬ä¸€è¡ŒåŠ #!/bin/sh
å¦åˆ™ä¼šå‡ºçŽ?bin/sh: /opt/backup_exp.sh: cannot execute binary file错误
3ã€æ³¨æ„在执行exp命ä×o之å‰åQŒéœ€è¦è®¾¾|®çŽ¯å¢ƒå˜é‡ï¼Œæ‰€ä»¥åœ¨é€»è¾‘å¤‡ä†¾è„šæœ¬ä¸æ‰§è¡Œäº†. /home/autoBackup/ora_env 命ä×o;
å‚考网™åµï¼š
http://blog.csdn.net/wzy0623/archive/2008/10/31/3193150.aspx
http://www.linuxsir.org/main/?q=node/209
本文æ¥è‡ªCSDNåšå®¢åQŒè{è½½è¯·æ ‡æ˜Žå‡ºå¤„åQšhttp://blog.csdn.net/daimin1983/archive/2008/12/13/3511380.aspx
  使用cronæœåŠ¡åQŒç”¨ service crond status 查看 cronæœåŠ¡çŠ¶æ€ï¼Œå¦‚果没有å¯åЍåˆ?service crond startå¯åŠ¨å®ƒï¼Œ
  cronæœåŠ¡æ˜¯ä¸€ä¸ªå®šæ—¶æ‰§è¡Œçš„æœåŠ¡åQŒå¯ä»¥é€šè¿‡crontab 命ä×oæ·ÕdŠ æˆ–è€…ç¼–è¾‘éœ€è¦å®šæ—¶æ‰§è¡Œçš„ä»ÕdŠ¡åQ?
  crontab -u //讑֮šæŸä¸ªç”¨æˆ·çš„cronæœåŠ¡åQŒä¸€èˆ¬rootç”¨æˆ·åœ¨æ‰§è¡Œè¿™ä¸ªå‘½ä»¤çš„æ—¶å€™éœ€è¦æ¤å‚æ•°
  crontab -l //列出æŸä¸ªç”¨æˆ·cronæœåŠ¡çš„è¯¦¾l†å†…å®?
  crontab -r //åˆ é™¤æ²¡ä¸ªç”¨æˆ·çš„cronæœåŠ¡
  crontab -e //¾~–辑æŸä¸ªç”¨æˆ·çš„cronæœåŠ¡
  比如说root查看自己的cron讄¡½®åQšcrontab -u root -l
  å†ä¾‹å¦‚,root惛_ˆ 除fredçš„cron讄¡½®åQšcrontab -u fred -r
  在编辑cronæœåŠ¡æ—Óž¼Œ¾~–辑的内å®ÒŽœ‰ä¸€äº›æ ¼å¼å’Œ¾U¦å®šåQŒè¾“入:crontab -u root -e
  ˜q›å…¥vi¾~–辑模å¼åQŒç¼–辑的内容一定覽W¦åˆä¸‹é¢çš„æ ¼å¼ï¼š*/1 * * * * ls >> /tmp/ls.txt
  ¾~–辑/etc/crontabæ–‡äšgåQŒåœ¨æœ«å°¾åŠ ä¸Šä¸€è¡Œï¼š 30 5 * * * root init 6 ˜q™æ ·ž®±å°†¾pÈ»Ÿé…ç½®ä¸ÞZº†æ¯å¤©æ—©ä¸Š5ç‚?0è‡ªåŠ¨é‡æ–°å¯åЍã€?
  需è¦å°†crond讄¡½®ä¸ºç³»¾lŸå¯åЍåŽè‡ªåЍå¯åŠ¨çš„æœåŠ¡ï¼Œå¯ä»¥åœ?etc/rc.d/rc.local ä¸ï¼Œåœ¨æœ«ž®‘ÖŠ ä¸?
  service crond start
  如果˜q˜éœ€è¦åœ¨¾pÈ»Ÿå¯åЍååŠ è½½å…¶ä»–æœåŠ¡ï¼Œå¯ä»¥¾l§ç®‹åŠ ä¸Šå…¶ä»–æœåŠ¡çš„å¯åЍ命令ã€?
  比如åQ?service mysqld start
  基本用法:
  1. crontab -l
  列出当å‰çš„crontabä»ÕdŠ¡
  2. crontab -d
ã€€ã€€åˆ é™¤å½“å‰çš„crontabä»ÕdŠ¡
  3. crontab -e (solaris5.8ä¸Šé¢æ˜?crontab -r)
  ¾~–辑一个crontabä»ÕdŠ¡,ctrl_D¾l“æŸ
  4. crontab filename
  以filenameåšäØ“crontabçš„ä“QåŠ¡åˆ—è¡¨æ–‡ä»¶åÆˆè½½å…¥
  crontab fileçš„æ ¼å¼?
  crontab æ–‡äšgä¸çš„行由 6 个嗌D늻„æˆï¼Œä¸åŒå—段间用½Iºæ ¼æˆ?tab é”®åˆ†éš”ã€‚å‰ 5 个嗌D‰|Œ‡å®šå‘½ä»¤è¦˜q行的时é—?
  分钟 (0-59)
  ž®æ—¶ (0-23)
  日期 (1-31)
  月䆾 (1-12)
  星期å‡?0-6åQŒå…¶ä¸?0 代表星期æ—?
  ½W?6 个嗌D‰|˜¯ä¸€ä¸ªè¦åœ¨é€‚当旉™—´æ‰§è¡Œçš„å—½W¦ä¸²
  例å:
  #MIN HOUR DAY MONTH DAYOFWEEK COMMAND
  #æ¯å¤©æ—©ä¸Š6ç‚?0åˆ?
  10 6 * * * date
  #æ¯ä¸¤ä¸ªå°æ—?
  0 */2 * * * date (solaris 5.8ä¼ég¹Žä¸æ”¯æŒæ¤¿U写æ³?
  #晚上11点到早上8点之间æ¯ä¸¤ä¸ªž®æ—¶åQŒæ—©ä¸?ç‚?
  0 23-7/2åQ? * * * date
  #æ¯ä¸ªæœˆçš„4å·å’Œæ¯ä¸ª½C¼æ‹œçš„礼拜一到礼拜三的早ä¸?1ç‚?
  0 11 4 * mon-wed date
  #1月䆾日早��
  0 4 1 jan * date
  补充åQšåœ¨ä½¿ç”¨crontab的时候,è¦ç‰¹åˆ«æ³¨æ„的是è¿è¡Œè„šæœ¬ä¸èƒ½å¤Ÿè®‰K—®åˆ°çš„环境å˜é‡å’Œå½“剿µ‹è¯•环境ä¸çš„环境å˜é‡æœªå¿…一è‡ß_¼Œä¸€ä¸ªæ¯”较ä¿é™©çš„åšæ³•是在˜q行的脚本程åºä¸è‡ªè¡Œè®„¡½®çŽ¯å¢ƒå˜é‡(export)
  (1)å…ˆå¾ä¸€ä¸ªæ–‡ä»¶crond.txt如下åQ?æ¯å¤©æ—©ä¸Š5ç‚?6åˆ†é‡æ–°å¯åŠ?
  36 5 * * * reboot
  (2)ä¸Šä¼ åˆ?opt目录
  (3)˜q行命ä×o
  crontab /opt/crond.txt
  crontab -l
  让酾|®æ–‡ä»¶ç”Ÿæ•ˆï¼šå¦‚果让酾|®æ–‡ä»¶ç”Ÿæ•ˆï¼Œ˜q˜å¾—釿–°å¯åЍcronåQŒåˆ‡è®ŽÍ¼Œæ—¢ç„¶æ¯ä¸ªç”¨æˆ·ä¸‹çš„croné…置文äšg修改åŽã€‚也è¦é‡æ–°å¯åЍcronæœåС噍ã€?
  在Fedora å’ŒRedhatä¸ï¼Œæˆ‘们应该用;
  [root@localhost ~]# /etc/init.d/crond restart
  如果让crond 在开机时˜q行åQŒåº”该改å˜å…¶˜q行¾U§åˆ«åQ?
  [root@localhost ~]# chkconfig --levels 35 crond on
  service crond status 查看 cronæœåŠ¡çŠ¶æ€ï¼Œå¦‚果没有å¯åЍåˆ?service crond startå¯åŠ¨å®ƒï¼Œ cronæœåŠ¡æ˜¯ä¸€ä¸ªå®šæ—¶æ‰§è¡Œçš„æœåŠ¡åQŒå¯ä»¥é€šè¿‡crontab 命ä×oæ·ÕdŠ æˆ–è€…ç¼–è¾‘éœ€è¦å®šæ—¶æ‰§è¡Œçš„ä»ÕdŠ¡
Crontabæ–‡äšgçš„æ¯ä¸€è¡Œç”±å…个åŸ?minutesã€hoursã€day of monthã€monthã€day of weekã€?command)¾l?æˆï¼ŒåŸŸä¹‹é—´ç”¨½Iºæ ¼æˆ–Tab分开åQŒå…¶ä¸ï¼š
minutesåQ?分钟域,值的范围æ˜?åˆ?9
hoursåQ?ž®æ—¶åŸŸï¼Œå€¼çš„范围æ˜?åˆ?3
day of monthåQ?日期åQŒå€¼çš„范围æ˜?åˆ?1
monthåQ?月䆾åQŒå€¼çš„范围æ˜?åˆ?2
day of weekåQ?星期åQŒå€¼çš„范围æ˜?åˆ?åQŒæ˜ŸæœŸæ—¥å€égØ“0
commandåQ?所è¦è¿è¡Œçš„命ä×o
如果一个域æ˜?åQŒè¡¨æ˜Žå‘½ä»¤å¯ä»¥åœ¨è¯¥åŸŸæ‰€æœ‰å¯èƒ½çš„å–倯DŒƒå›´å†…执行ã€?
如果一个域是由˜qžå—½W¦éš”开的两个数å—,表明命ä×oå¯ä»¥åœ¨ä¸¤ä¸ªæ•°å—ä¹‹é—´çš„èŒƒå›´å†…æ‰§è¡Œï¼ˆåŒ…æ‹¬ä¸¤ä¸ªæ•°å— æœ¬èínåQ‰ã€?
如果一个域是由逗å·éš”开的一¾pÕdˆ—值组æˆçš„åQŒè¡¨æ˜Žå‘½ä»¤å¯ä»¥åœ¨˜q™äº›å€¼ç»„æˆçš„范围内执行ã€?
如果日期域和星期域都有å€û|¼Œåˆ™è¿™ä¸¤ä¸ªåŸŸéƒ½æœ‰æ•ˆã€?
¾~–写一个文ä»Óž¼Œç”¨ä»¥å¯åŠ¨è‡ªåŠ¨å¤‡ä†¾˜q›ç¨‹ã€?
cd /opt
touch reboot.txt
在reboot.txt䏿·»åР䏀䏋内å®?
0 4 * * * reboot
crontab /opt/reboot.txt
用crontab -e¾~–辑定时æ“作åQŒä¾‹å¦‚åŠ å…¥ä¸‹è¡Œå‘½ä»¤ï¼š
用crontab åQl命ä×oæ¥æŸ¥çœ?
注æ„:需è¦å¯åЍæœåŠ?æ·ÕdŠ åœ¨rc.localä¸?
é‡å¯crondä»ÕdŠ¡
/etc/init.d/cron restart (ubuntu�
½W¬ä¸€¿U?在Fedora或Redhat ½{‰ä»¥RPM包管ç†çš„¾pÈ»Ÿä¸ï¼›
[root@localhost ~]# /etc/init.d/crond start
[root@localhost ~]# /etc/init.d/crond stop
[root@localhost ~]# /etc/init.d/crond restart
/etc/rc.d/init.d/crond restart
命ä×o½Ž€ä»?
crontab-æ“作æ¯ä¸ªç”¨æˆ·çš„守护程åºå’Œè¯¥æ‰§è¡Œçš„æ—‰™—´è¡¨ã€?
éƒ¨åˆ†å‚æ•°è¯´æ˜Ž
crontab file [-u user]-用指定的文äšg替代目å‰çš„crontabã€?
crontab-[-u user]-ç”¨æ ‡å‡†è¾“å…¥æ›¿ä»£ç›®å‰çš„crontab.
crontab-1[user]-列出用户目å‰çš„crontab.
crontab-e[user]-¾~–辑用户目å‰çš„crontab.
crontab-d[user]-åˆ é™¤ç”¨æˆ·ç›®å‰çš„crontab.
crontab-c dir- 指定crontab的目录�
crontabæ–‡äšgçš„æ ¼å¼ï¼šM H D m d cmd.
M: 分钟åQ?-59åQ‰ã€?
HåQšå°æ—Óž¼ˆ0-23åQ‰ã€?
DåQšå¤©åQ?-31åQ‰ã€?
m: 月(1-12åQ‰ã€?
d: 一星期内的天(0~6åQ?为星期天åQ‰ã€?
cmdè¦è¿è¡Œçš„½E‹åºåQŒç¨‹åºè¢«é€å…¥sh执行åQŒè¿™ä¸ªshellåªæœ‰USER,HOME,SHELL˜q™ä¸‰ä¸ªçŽ¯å¢ƒå˜é‡ã€?
䏋颿˜¯ä¸€ä¸ªä¾‹åæ–‡ä»Óž¼š
|
åQˆè´£ä»È¼–辑:云ååQ?
/sbin/service crond start //å¯åЍæœåŠ¡
/sbin/service crond stop //关闿œåŠ¡
/sbin/service crond restart //é‡å¯æœåŠ¡
/sbin/service crond reload //釿–°è½½å…¥é…ç½®
ä½ ä¹Ÿå¯ä»¥ž®†è¿™ä¸ªæœåŠ¡åœ¨¾pÈ»Ÿå¯åŠ¨çš„æ—¶å€™è‡ªåŠ¨å¯åŠ¨ï¼š
åœ?etc/rc.d/rc.local˜q™ä¸ªè„šæœ¬çš„æœ«ž®‘ÖŠ 上:
/sbin/service crond start
现在Cron˜q™ä¸ªæœåС已ç»åœ¨è¿›½E‹é‡Œé¢äº†åQŒæˆ‘们就å¯ä»¥ç”¨è¿™ä¸ªæœåŠ¡äº†åQŒCronæœåŠ¡æä¾›ä»¥ä¸‹å‡ ç§æŽ¥å£ä¾›å¤§å®¶ä‹É用:
1.直接用crontab命ä×o¾~–辑
cronæœåŠ¡æä¾›crontab命ä×oæ¥è®¾å®šcronæœåŠ¡çš„ï¼Œä»¥ä¸‹æ˜¯è¿™ä¸ªå‘½ä»¤çš„ä¸€äº›å‚æ•îC¸Žè¯´æ˜ŽåQ?/p>
crontab -u //讑֮šæŸä¸ªç”¨æˆ·çš„cronæœåŠ¡åQŒä¸€èˆ¬rootç”¨æˆ·åœ¨æ‰§è¡Œè¿™ä¸ªå‘½ä»¤çš„æ—¶å€™éœ€è¦æ¤å‚æ•°
crontab -l //列出æŸä¸ªç”¨æˆ·cronæœåŠ¡çš„è¯¦¾l†å†…å®?/p>
crontab -r //åˆ é™¤æ²¡ä¸ªç”¨æˆ·çš„cronæœåŠ¡
crontab -e //¾~–辑æŸä¸ªç”¨æˆ·çš„cronæœåŠ¡
比如说root查看自己的cron讄¡½®åQšcrontab -u root -l
å†ä¾‹å¦‚,root惛_ˆ 除fredçš„cron讄¡½®åQšcrontab -u fred -r
在编辑cronæœåŠ¡æ—Óž¼Œ¾~–辑的内å®ÒŽœ‰ä¸€äº›æ ¼å¼å’Œ¾U¦å®šåQŒè¾“入:crontab -u root -e
˜q›å…¥vi¾~–辑模å¼åQŒç¼–辑的内容一定覽W¦åˆä¸‹é¢çš„æ ¼å¼ï¼š*/1 * * * * ls >> /tmp/ls.txt
˜q™ä¸ªæ ¼å¼çš„å‰ä¸€éƒ¨åˆ†æ˜¯å¯¹æ—‰™—´çš„设定,åŽé¢ä¸€éƒ¨åˆ†æ˜¯è¦æ‰§è¡Œçš„å‘½ä»¤ï¼Œå¦‚æžœè¦æ‰§è¡Œçš„命ä×o太多åQŒå¯ä»¥æŠŠ˜q™äº›å‘½ä×o写到一个脚本里é¢ï¼Œç„¶åŽåœ¨è¿™é‡Œç›´æŽ¥è°ƒç”¨è¿™ä¸ªè„šæœ¬å°±å¯ä»¥äº†ï¼Œè°ƒç”¨çš„æ—¶å€™è®°å¾—å†™å‡ºå‘½ä»¤çš„å®Œæ•´è·¯å¾„ã€‚æ—¶é—´çš„è®‘Ö®šæˆ‘ä»¬æœ‰ä¸€å®šçš„¾U¦å®šåQŒå‰é¢äº”ä¸?å·ä»£è¡¨äº”个数å—,数å—çš„å–倯DŒƒå›´å’Œå«ä¹‰å¦‚下åQ?/p>
分钟 åQ?-59åQ?/p>
ž®æ™‚ åQ?-23åQ?/p>
日期 åQ?-31åQ?/p>
月䆾 åQ?-12åQ?/p>
星期 åQ?-6åQ?/0代表星期å¤?/p>
除了数嗘q˜æœ‰å‡ 个个特ŒDŠçš„½W¦å·ž®±æ˜¯"*"ã€?/"å’?-"ã€?,"åQ?代表所有的å–倯DŒƒå›´å†…的数å—,"/"代表æ¯çš„æ„æ€?"*/5"表示æ¯?个å•ä½ï¼Œ"-"代表从æŸä¸ªæ•°å—到æŸä¸ªæ•°å—,","åˆ†å¼€å‡ ä¸ª¼›ÀL•£çš„æ•°å—。以下ä‹Då‡ ä¸ªä¾‹å说明问题åQ?/p>
æ¯å¤©æ—©ä¸Š6ç‚?/p>
0 6 * * * echo "Good morning." >> /tmp/test.txt //注æ„å•纯echoåQŒä»Žå±å¹•上看ä¸åˆ°ä»ÖM½•输出åQŒå› 为cron把ä“Q何输出都email到root的信½Ž×ƒº†ã€?/p>
æ¯ä¸¤ä¸ªå°æ—?/p>
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11点到早上8点之间æ¯ä¸¤ä¸ªž®æ—¶åQŒæ—©ä¸Šå…«ç‚?/p>
0 23-7/2åQ? * * * echo "Have a good dreamåQšï¼‰" >> /tmp/test.txt
æ¯ä¸ªæœˆçš„4å·å’Œæ¯ä¸ª½C¼æ‹œçš„礼拜一到礼拜三的早ä¸?1ç‚?/p>
0 11 4 * 1-3 command line
1�日早��/p>
0 4 1 1 * command line
æ¯æ¬¡¾~–辑完æŸä¸ªç”¨æˆïLš„cron讄¡½®åŽï¼Œcron自动åœ?var/spool/cron下生æˆä¸€ä¸ªä¸Žæ¤ç”¨æˆ·åŒå的文äšgåQŒæ¤ç”¨æˆ·çš„cronä¿¡æ¯éƒ½è®°å½•在˜q™ä¸ªæ–‡äšgä¸ï¼Œ˜q™ä¸ªæ–‡äšg是ä¸å¯ä»¥ç›´æŽ¥¾~–辑的,åªå¯ä»¥ç”¨crontab -e æ¥ç¼–辑。cronå¯åŠ¨åŽæ¯˜q‡ä¸€ä»½é’Ÿè¯ÖM¸€‹Æ¡è¿™ä¸ªæ–‡ä»Óž¼Œ‹‚€æŸ¥æ˜¯å¦è¦æ‰§è¡Œé‡Œé¢çš„å‘½ä»¤ã€‚å› æ¤æ¤æ–‡äšg修改åŽä¸éœ€è¦é‡æ–°å¯åЍcronæœåŠ¡ã€?/p>
2.¾~–辑/etc/crontab æ–‡äšgé…ç½®cron
cronæœåŠ¡æ¯åˆ†é’Ÿä¸ä»…è¦è¯ÖM¸€‹Æ?var/spool/cron内的所有文ä»Óž¼Œ˜q˜éœ€è¦è¯»ä¸€‹Æ?etc/crontab,å› æ¤æˆ‘们é…ç½®˜q™ä¸ªæ–‡äšg也能˜q用 cronæœåŠ¡åšä¸€äº›äº‹æƒ…。用crontabé…置是针å¯ÒŽŸä¸ªç”¨æˆïLš„åQŒè€Œç¼–è¾?etc/crontab是针对系¾lŸçš„ä»ÕdŠ¡ã€‚æ¤æ–‡äšgçš„æ–‡ä»¶æ ¼å¼æ˜¯åQ?/p>
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误åQŒæˆ–者有数æ®è¾“出åQŒæ•°æ®ä½œä¸ºé‚®ä»¶å‘¾l™è¿™ä¸ªå¸å?/p>
HOME=/ //使用者è¿è¡Œçš„路径,˜q™é‡Œæ˜¯æ ¹ç›®å½•
# run-parts
01 * * * * root run-parts /etc/cron.hourly //æ¯å°æ—¶æ‰§è¡?etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //æ¯å¤©æ‰§è¡Œ/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //æ¯æ˜ŸæœŸæ‰§è¡?etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //æ¯æœˆåŽÀL‰§è¡?etc/cron.monthly内的脚本
大家注æ„"run-parts"˜q™ä¸ªå‚数了,如果åŽÀLމ˜q™ä¸ªå‚æ•°çš„è¯åQŒåŽé¢å°±å¯ä»¥å†™è¦˜q行的æŸä¸ªè„šæœ¬ååQŒè€Œä¸æ˜¯æ–‡ä»¶å¤¹å了
apt-cache show package 获å–包的相关信æ¯åQŒå¦‚说明ã€å¤§ž®ã€ç‰ˆæœ¬ç‰
sudo apt-get install package 安装�/p>
sudo apt-get install package - - reinstall 釿–°å®‰è£…åŒ?/p>
sudo apt-get -f install ä¿®å¤å®‰è£…"-f = ——fix-missing"
sudo apt-get remove package åˆ é™¤åŒ?/p>
sudo apt-get remove package - - purge åˆ é™¤åŒ…ï¼ŒåŒ…æ‹¬åˆ é™¤é…置文äšg½{?/p>
sudo apt-get update 更新�/p>
sudo apt-get upgrade 更新已安装的�/p>
sudo apt-get dist-upgrade å‡çñ”¾pÈ»Ÿ
sudo apt-get dselect-upgrade 使用 dselect å‡çñ”
apt-cache depends package 了解使用ä¾èµ–
apt-cache rdepends package 是查看该包被哪些包ä¾èµ?/p>
sudo apt-get build-dep package 安装相关的编译环�/p>
apt-get source package 下è²è¯¥åŒ…çš„æºä»£ç
sudo apt-get clean && sudo apt-get autoclean æ¸…ç†æ— 用的包
sudo apt-get check ‹‚€æŸ¥æ˜¯å¦æœ‰æŸåçš„ä¾èµ?/p>
1. 安装增强功能�Guest Additions)
安装好Ubuntu 8.10åŽï¼Œ˜q行Ubuntuòq¶ç™»å½•。然åŽåœ¨VirtualBoxçš„èœå•里选择"讑֤‡(Devices)" -> "安装增强功能åŒ?Install Guest Additions)"ã€?/p>
ä½ ä¼šå‘现在Ubuntu桌é¢ä¸Šå¤šå‡ÞZ¸€ä¸ªå…‰ç›˜å›¾æ ‡ï¼Œ˜q™å¼ å…‰ç›˜é»˜è®¤è¢«è‡ªåŠ¨åŠ è½½åˆ°äº†æ–‡ä»¶å¤¹/media/cdom0。进入命令行¾lˆç«¯åQŒè¾“入:
cd /media/cdom0
sudo ./VboxLinuxAdditions.run
开始安装工具包。安装完毕åŽä¼šæ½Cø™¦é‡å¯Ubuntuã€?/p>
2. 讄¡½®å…׃ínæ–‡äšgå¤?/p>
é‡å¯å®ŒæˆåŽç‚¹å‡?讑֤‡(Devices)" -> å…׃ínæ–‡äšgå¤?Shared Folders)èœå•åQŒæ·»åŠ ä¸€ä¸ªå…±äº«æ–‡ä»¶å¤¹åQŒé€‰é¡¹å›ºå®šå’ŒäÍæ—¶æ˜¯æŒ‡è¯¥æ–‡äšgå¤ÒŽ˜¯å¦æ˜¯æŒä¹…的。共享åå¯ä»¥ä»Õd–一个自己喜‹Æ¢çš„åQŒæ¯”å¦?gongxiang"åQŒå°½é‡ä‹É用英文å¿U°ã€?/p>
3. 挂è²å…׃ínæ–‡äšgå¤?/p>
釿–°˜q›å…¥è™šæ‹ŸUbuntuåQŒåœ¨å‘½ä×o行终端下输入åQ?/p>
sudo mkdir /mnt/shared
sudo mount -t vboxsf gongxiang /mnt/shared
å…¶ä¸"gongxiang"是之å‰åˆ›å»ºçš„å…׃ínæ–‡äšg夹的åå—。OKåQŒçŽ°åœ¨Ubuntu和主机å¯ä»¥äº’ä¼ æ–‡ä»¶äº†ã€?/p>
å‡å¦‚æ‚¨ä¸æƒÏx¯ä¸€‹Æ¡éƒ½æ‰‹åŠ¨æŒ‚è²åQŒå¯ä»¥åœ¨/etc/fstab䏿·»åР䏀™å?/p>
gongxiang /mnt/shared vboxsf rw,gid=100,uid=1000,auto 0 0
˜q™æ ·ž®Þpƒ½å¤Ÿè‡ªåŠ¨æŒ‚è½½äº†ã€?/p>
4. å¸è²çš„è¯ä½¿ç”¨ä¸‹é¢çš„命令:
sudo umount -f /mnt/shared
注æ„åQ?/p>
å…׃ínæ–‡äšg夹的åç§°åƒä¸‡ä¸è¦å’ŒæŒ‚载点的å¿U°ç›¸åŒã€‚比如,上é¢çš„æŒ‚载点æ˜?mnt/sharedåQŒå¦‚果共享文件夹的åå—也是sharedçš„è¯åQŒåœ¨æŒ‚è²çš„æ—¶å€™å°±ä¼šå‡ºçŽ°å¦‚ä¸‹çš„é”™è¯¯ä¿¡æ¯(看http://www.virtualbox.org/ticket/2265)åQ?/p>
/sbin/mount.vboxsf: mounting failed with the error: Protocol error
åŽŸå› åˆ†æžå¯ä»¥çœ‹Tips on running Sun Virtualboxçš„Shared Folder on a Linux Guest节ã€?/p>
有时候需è¦åœ¨ä¸€ä¸?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C4%BF%C2%BC">目录下的所有文件查扑֫有特定嗽W¦ä¸²çš„æ–‡ä»Óž¼ŒåŠç‰¹å®šå—½W¦ä¸²åœ¨æ–‡ä»¶ä¸çš„定ä½ã€?br />
自然å应肯定是ä‹É用grep命ä×oåQŒåŠ ä¸?r傿•°ã€?br />
grep -r "pattern" . 坿˜¯å¦‚果待查扄¡š„目录是SVN目录åQŒç„¶åŽï¼Œä¸È›®å½•下é¢åˆæœ‰N多å目录åQŒå†ç”¨grepå¯å°±æƒ¨äº†åQŒä¼šæŸ¥å‡ºå¥½å¤š.svnç›®å½•ä¸‹å«æœ‰è¯¥å—符串的文äšgåQŒè€Œè¿™äº›æ–‡ä»¶æ˜¯ 创å¾SVN目录时由 tortoiseSVN自动创å¾çš„辅助目录。这些文件我们是ä¸ä¿®æ”¹çš„。但是大é‡è¿™æ ïLš„æ–‡äšg会严é‡åª„哿ˆ‘们的修改速度ã€?br /> grepæœ?-exclude傿•°åQ?br /> grep -r --exclude=.svn "pattern" . 但是˜q™åªèƒ½æŽ’除掉ä¸È›®å½•下边的.svn目录åQŒå¯¹äºŽå目录里的.svnž®±æ— èƒ½äØ“åŠ›äº†ã€?br /> ˜q™æ—¶å€™å°±è¯¥find命ä×o上场了。先说一下findä¸å¯¹æˆ‘ä»¬æœ€æœ‰ç”¨çš„å‚æ•?prune 如果在查找文件时希望忽略æŸä¸ªç›®å½•åQŒé‚£ä¹ˆå¯ä»¥ä‹Éç”?pruneé€‰é¡¹æ¥æŒ‡å‡ºéœ€è¦å¿½ç•¥çš„目录ã€?br /> 比如è¦åœ¨å½“å‰ç›®å½•下查找ä¸åœ?svnå目录之内的所有文ä»?br /> find . -path "*\.svn" -prune -o -print -path "*\.svn" -prune -o -print æ˜?-path "*\.svn" -a -prune -o -print 的简写表辑ּã€?br /> æŒ‰é¡ºåºæ±‚å€? -a å’?-o 都是çŸèµ\求å€û|¼Œä¸?shell çš?&& å’?|| ¾cÖM¼¼ã€?br /> 如果 -path "*\.svn" 为真åQŒåˆ™æ±‚å€?-prune , -prune ˜q”回真,与逻辑表达å¼äؓ真;å¦åˆ™ä¸æ±‚å€?-pruneåQŒä¸Žé€»è¾‘表达å¼äØ“å‡ã€?br /> 如果 -path "*\.svn" -a -prune 为å‡åQŒåˆ™æ±‚å€?-print åQ?print˜q”回真,或逻辑表达å¼äؓ真;å¦åˆ™ä¸æ±‚å€?-printåQŒæˆ–逻辑表达å¼äؓ真ã€?br /> ˜q™ä¸ªè¡¨è¾¾å¼ç»„åˆç‰¹ä¾‹å¯ä»¥ç”¨ä¼ªç 写䨓 if -path "*\.svn" then -prune else 如果需è¦é¿å¼€å¤šä¸ªæ–‡äšgå¤?å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„命ä»? find . \( -path dir1 -o -path file1 \) -prune -o -print 圆括寂¡¨½Cø™¡¨è¾‘ּ的结åˆã€?br /> \ 表示引用åQŒå³æŒ‡ç¤º shell ä¸å¯¹åŽé¢çš„å—½W¦ä½œç‰ÒŽ®Šè§£é‡ŠåQŒè€Œç•™¾l?find 命ä×o去解释其æ„义ã€?br /> 查找æŸä¸€¼‹®å®šæ–‡äšgåQ?name½{‰é€‰é¡¹åŠ åœ¨-o ä¹‹åŽ #find . \(-path dir1 -o -path file1 \) -prune -o -name "temp" -print 排除目录已ç»åšåˆ°äº? 下一æ¥å°±æ˜¯ç”¨grepåŽ?span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CB%D1%CB%F7">æœçƒ¦ç‰¹å®šä¸²äº†.¾l“åˆxargs使用å›_¯. find . -path "*\.svn" -prune -o -print|xargs grep "CodeType" -n |
修改 /etc/sysconfig/i18n æ–‡äšgåQŒå¦‚
LANG="en_US"åQŒxwindow会显½Cø™‹±æ–‡ç•Œé¢ï¼Œ
LANG="zh_CN.GB18030"åQŒxwindow会显½CÞZ¸æ–‡ç•Œé¢ã€?/p>
¾~–辑/etc/sysconfig/i18n˜q™ä¸ªæ–‡äšgåQ?br />
LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"
ä¿å˜,é‡è“v.OKäº?br />
æ³?
I18N æ˜?internationalization 的羃写åÅžå¼ï¼Œæ„å³åœ?i å’?n 之间æœ?18 ä¸ªå—æ¯ï¼Œæœ¬æ„是指软äšgçš?#8220;国际åŒ?#8221;.
I18N支æŒå¤šç§è¯è¨€åQŒä½†æ˜¯åŒä¸€æ—‰™—´åªèƒ½æ˜¯è‹±æ–‡å’Œä¸€¿U选定的è¯a€åQŒä¾‹å¦‚英æ–?䏿–‡ã€è‹±æ–?å¾äh–‡ã€è‹±æ–?韩文½{‰ç‰åQ?br />
原æ¥çš?
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"
VirtualBox 在XP下虚拟Ubuntuæ—¶ä¸èƒ½å®Œå…¨å…¨å±çš„问题解决æ–ÒŽ³•
本ähLCD 1280×800 Virtualbox 在深度XPä¸?虚拟 Ubuntu 8.04
声音ã€ç½‘¾lœä¸€åˆ‡æ£å¸¸ï¼Œž®±æ˜¯æœ‰ä¸èƒ½å®Œå…¨å…¨å±çš„问题åQŒubuntuä½œäØ“å®¢æœºçš„åˆ†è¾¨çŽ‡
åªèƒ½è°ƒåˆ°800×600,¾l过一番检ç´?摸烦åQŒæžå®šï¼ŒçŽ°æ•´ç†å¦‚下:
1.安装VboxLinuxadditions
aåQ‰å®‰è£…make gcc lib½{?/p>
-------------------------------
apt-get install build-essential
-------------------------------
båQ‰å®‰è£…module-assistant
---------------------------------
apt-get install module-assistant
---------------------------------
cåQ‰è¿è¡?/p>
-------------
m-a prepare
--------------
dåQ‰å®‰è£…VboxLinuxadditions(é€?#8220;讑֤‡”-“安装虚拟电脑工具åŒ?#8221;)
˜q›å…¥ç›®å½•åŽè¿è¡?/p>
---------------------------------
sudo ./VBoxLinuxAdditions.run
---------------------------------
2.修改VBOX在Ubuntu里的讄¡½®
˜q行
--------------------------------
sudo gedit /etc/X11/xorg.conf
--------------------------------
åŽå¦‚下把部分修改
------------------------
Section "Device"
Identifier "Configured Video Device"
Driver "vboxvideo"
EndSection
Section "Monitor"
Identifier "Configured Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
DefaultDepth 24 #我这里颜色质é‡åªèƒ½å¼€åˆ?4
SubSection "Display"
Modes "1280x800" "800x600" #按å±òq•éœ€è¦æ”¹ž®±å¯ä»¥äº†
EndSubSection
EndSection
-------------------------------
3.é‡å¯UbuntuåQŒç„¶åŽåˆ†è¾¨çއž®±å¯ä»¥è®¾¾|®æˆ1280×800äº?/p>
æŒ?å³ctrl+F" ˜q›å…¥å…¨å±åQšæ— ¾~模å¼?å…׃ín剪脓æ¿ï¼Œlinuxå’Œwin的和òq›_…±å˜ï¼Œ
VBox的网¾lœè®¾¾|®æˆNATåQŒguestå…׃ínhost的网¾lœï¼Œ˜q™æ ·åº”该ž®±å¯ä»¥åœ¨æ¶å¿ƒçš„æ ¡å›ç½‘玩上linux了~
æ–‡ç« å‡ºå¤„åQšhttp://www.diybl.com/course/6_system/linux/Linuxjs/2008614/125481.html
在我们ä‹É用Linuxæ—Óž¼Œä¸€äº›å¸¸ç”¨çš„命ä×oåQŒæ¯”如lsã€dateã€pwd½{‰ï¼ˆä¸ä¸€ä¸€ä¾‹ä‹D了)ä¸å¤ªå®ÒŽ˜“忘记åQŒä½†æ˜¯å¯¹äºŽä¸€äº›ä¸å¤ªå¸¸ç”¨çš„命ä×o而言åQŒä¸å…‰å…‰æ˜¯å‚敎ͼŒž®Þp¿žå‘½ä×o都会忘记åQˆå°å¼Ÿæ˜¯åšå¼€å‘工作的åQŒæ‰€ä»¥æ¯”较容易忘è®?DåQ?/p>
让我们ç‘ô¾l,开始ä‹Éç”?awkåQŒä»¥äº†è§£å…¶å·¥ä½œåŽŸç†ã€‚在命ä×o行ä¸è¾“入以下命ä×oåQ?/p>
$ awk '{ print }' /etc/passwd
Â
您将会è§åˆ?/etc/passwd æ–‡äšg的内容出现在眼å‰ã€‚现在,解释 awk åšäº†äº›ä»€ä¹ˆã€‚è°ƒç”?awk æ—Óž¼Œæˆ‘们指定 /etc/passwd ä½œäØ“è¾“å…¥æ–‡äšg。执è¡?awk æ—Óž¼Œå®ƒä¾‹Æ¡å¯¹ /etc/passwd ä¸çš„æ¯ä¸€è¡Œæ‰§è¡?print 命ä×o。所有输出都å‘é€åˆ° stdoutåQŒæ‰€å¾—到的结果与与执行catting /etc/passwd完全相åŒã€?/p>
现在åQŒè§£é‡?{ print } 代ç å—。在 awk ä¸ï¼ŒèŠ±æ‹¬åïL”¨äºŽå°†å‡ å—ä»£ç ¾l„åˆåˆîC¸€èµøP¼Œ˜q™ä¸€ç‚¹ç±»ä¼égºŽ C è¯è¨€ã€‚在代ç å—ä¸åªæœ‰ä¸€æ?print 命ä×o。在 awk ä¸ï¼Œå¦‚æžœåªå‡ºçŽ?print 命ä×oåQŒé‚£ä¹ˆå°†æ‰“å°å½“å‰è¡Œçš„全部内容ã€?/p>
˜q™é‡Œæ˜¯å¦ä¸€ä¸?awk ½CÞZ¾‹åQŒå®ƒçš„作用与上例完全相åŒåQ?/p>
$ awk '{ print $0 }' /etc/passwd
Â
åœ?awk ä¸ï¼Œ $0 å˜é‡è¡¨ç¤ºæ•´ä¸ªå½“å‰è¡Œï¼Œæ‰€ä»?print å’?print $0 çš„ä½œç”¨å®Œå…¨ä¸€æ —÷€?/p>
如果您愿æ„,å¯ä»¥åˆ›å¾ä¸€ä¸?awk ½E‹åºåQŒè®©å®ƒè¾“å‡ÞZ¸Žè¾“入数æ®å®Œå…¨æ— 关的数æ®ã€‚以下是一个示例:
$ awk '{ print "" }' /etc/passwd
Â
åªè¦ž®?"" å—ç¬¦ä¸²ä¼ é€’ç»™ print 命ä×oåQŒå®ƒž®×ƒ¼šæ‰“å°½Iºç™½è¡Œã€‚如æž?a onclick="javascript:tagshow(event, '%B2%E2%CA%D4');" href="javascript:;" target="_self">‹¹‹è¯•该脚本,ž®†ä¼šå‘现对于 /etc/passwd æ–‡äšgä¸çš„æ¯ä¸€è¡Œï¼Œawk 都输å‡ÞZ¸€ä¸ªç©ºç™½è¡Œã€‚冋ơ说明, awk 对输入文件ä¸çš„æ¯ä¸€è¡Œéƒ½æ‰§è¡Œ˜q™ä¸ªè„šæœ¬ã€‚ä»¥ä¸‹æ˜¯å¦ä¸€ä¸ªç¤ºä¾‹ï¼š
$ awk '{ print "hiya" }' /etc/passwd
Â
˜q行˜q™ä¸ªè„šæœ¬ž®†åœ¨æ‚¨çš„å±å¹•上写æ»?hiyaã€?)
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
å¤šä¸ªå—æ®µ
awk éžå¸¸å–„于处ç†åˆ†æˆå¤šä¸ªé€»è¾‘å—æ®µçš„æ–‡æœ¬ï¼Œè€Œä¸”让您å¯ä»¥æ¯«ä¸è´¹åŠ›åœ°å¼•ç”?awk è„šæœ¬ä¸æ¯ä¸ªç‹¬ç«‹çš„å—æ®µã€‚以下脚本将打å°å‡ºæ‚¨çš„ç³»¾lŸä¸Šæ‰€æœ‰ç”¨æˆ·å¸æˆïLš„列表åQ?/p>
$ awk -F":" '{ print $1 }' /etc/passwd
Â
上例ä¸ï¼Œåœ¨è°ƒç”?awk æ—Óž¼Œä½¿ç”¨ -F é€‰é¡¹æ¥æŒ‡å®?":" ä½œäØ“å—æ®µåˆ†éš”½W¦ã€‚awk å¤„ç† print $1 命ä×oæ—Óž¼Œå®ƒä¼šæ‰“å°å‡ºåœ¨è¾“入文äšg䏿¯ä¸€è¡Œä¸å‡ºçŽ°çš„ç¬¬ä¸€ä¸ªå—ŒDüc€‚以下是å¦ä¸€ä¸ªç¤ºä¾‹ï¼š
$ awk -F":" '{ print $1 $3 }' /etc/passwd
Â
以下是该脚本输出的摘录:
halt7
operator11
root0
shutdown6
sync5
bin1
....etc.
Â
如您所è§ï¼Œawk 打å°å‡?/etc/passwd æ–‡äšgçš„ç¬¬ä¸€å’Œç¬¬ä¸‰ä¸ªå—æ®µåQŒå®ƒä»¬æ£å¥½åˆ†åˆ«æ˜¯ç”¨æˆ·åå’Œç”¨æˆ·æ ‡è¯†å—æ®µã€‚现在,当脚本è¿è¡Œæ—¶åQŒå®ƒòq¶ä¸ç†æƒ³ -- 在两个输出嗌Dµä¹‹é—´æ²¡æœ‰ç©ºæ û|¼å¦‚æžœä¹ æƒ¯äºŽä‹Éç”?bash æˆ?python ˜q›è¡Œ¾~–程åQŒé‚£ä¹ˆæ‚¨ä¼šæŒ‡æœ?print $1 $3 命ä×o在两个嗌Dµä¹‹é—´æ’å…¥ç©ºæ ¹{€‚然而,当两个嗽W¦ä¸²åœ?awk ½E‹åºä¸å½¼æ¤ç›¸é‚ÀL—¶åQŒawk 会连接它们但ä¸åœ¨å®ƒä»¬ä¹‹é—´æ·ÕdŠ ½Iºæ ¼ã€‚ä»¥ä¸‹å‘½ä»¤ä¼šåœ¨è¿™ä¸¤ä¸ªå—æ®µä¸æ’入空æ û|¼š
$ awk -F":" '{ print $1 " " $3 }' /etc/passwd
Â
以这¿Uæ–¹å¼è°ƒç”?print æ—Óž¼Œå®ƒå°†˜qžæŽ¥ $1 ã€? " å’?$3 åQŒåˆ›å»ºå¯è¯Èš„输出。当ç„Óž¼Œå¦‚果需è¦çš„è¯ï¼Œæˆ‘们˜q˜å¯ä»¥æ’å…¥ä¸€äº›æ–‡æœ¬æ ‡½{¾ï¼š
$ awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd
Â
˜q™å°†äº§ç”Ÿä»¥ä¸‹è¾“出åQ?/p>
username: halt         uid:7
username: operator     uid:11
username: root         uid:0
username: shutdown     uid:6
username: sync         uid:5
username: bin          uid:1
....etc.
Â
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
外部脚本
ž®†è„šæœ¬ä½œä¸ºå‘½ä»¤è¡Œè‡ªå˜é‡ä¼ 递给 awk 对于ž®çš„å•行½E‹åºæ¥è¯´æ˜¯éžå¸¸ç®€å•çš„åQŒè€Œå¯¹äºŽå¤šè¡Œç¨‹åºï¼Œå®ƒå°±æ¯”è¾ƒå¤æ‚。您肯定惌™¦åœ¨å¤–éƒ¨æ–‡ä»¶ä¸æ’°å†™è„šæœ¬ã€‚ç„¶åŽå¯ä»¥å‘ awk ä¼ é€?-f 选项åQŒä»¥å‘它æä¾›æ¤è„šæœ¬æ–‡ä»Óž¼š
$ awk -f myscript.awk myfile.in
Â
ž®†è„šæœ¬æ”¾å…¥æ–‡æœ¬æ–‡ä»¶è¿˜å¯ä»¥è®©æ‚¨ä½¿ç”¨é™„åŠ awk 功能。例如,˜q™ä¸ªå¤šè¡Œè„šæœ¬ä¸Žå‰é¢çš„å•行脚本的作用相åŒï¼Œå®ƒä»¬éƒ½æ‰“å°å‡º /etc/passwd 䏿¯ä¸€è¡Œçš„½W¬ä¸€ä¸ªå—ŒDµï¼š
BEGIN {
   FS=":"
}
{ print $1 }
Â
˜q™ä¸¤ä¸ªæ–¹æ³•的差别在于如何讄¡½®å—段分隔½W¦ã€‚在˜q™ä¸ªè„šæœ¬ä¸ï¼Œå—段分隔½W¦åœ¨ä»£ç 自èín䏿Œ‡å®šï¼ˆé€šè¿‡è®„¡½® FS å˜é‡åQ‰ï¼Œè€Œåœ¨å‰ä¸€ä¸ªç¤ºä¾‹ä¸åQŒé€šè¿‡åœ¨å‘½ä»¤è¡Œä¸Šå‘ awk ä¼ é€?-F":" 选项æ¥è®¾¾|?FS。通常åQŒæœ€å¥½åœ¨è„šæœ¬è‡ªèínä¸è®¾¾|®å—ŒDµåˆ†éš”符åQŒåªæ˜¯å› 䏸™¿™è¡¨ç¤ºæ‚¨å¯ä»¥å°‘输入一个命令行自å˜é‡ã€‚我们将在本文的åŽé¢è¯¦ç»†è®¨è®º FS å˜é‡ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
BEGIN å’?END å?/p>
通常åQŒå¯¹äºŽæ¯ä¸ªè¾“入行åQŒawk 都会执行æ¯ä¸ªè„šæœ¬ä»£ç å—一‹Æ¡ã€‚然而,在许多编½E‹æƒ…况ä¸åQŒå¯èƒ½éœ€è¦åœ¨ awk 开始处ç†è¾“入文件ä¸çš„æ–‡æœ¬ä¹‹ å‰?执行åˆå§‹åŒ–代ç 。对于这¿U情况,awk å…许您定义一ä¸?BEGIN å—。我们在å‰ä¸€ä¸ªç¤ºä¾‹ä¸ä½¿ç”¨äº?BEGIN å—ã€‚å› ä¸?awk 在开始处ç†è¾“入文件之å‰ä¼šæ‰§è¡Œ BEGIN å—ï¼Œå› æ¤å®ƒæ˜¯åˆå§‹åŒ?FSåQˆå—ŒDµåˆ†éš”符åQ‰å˜é‡ã€æ‰“å°é¡µçœ‰æˆ–åˆå§‹åŒ–其它在½E‹åºä¸ä»¥åŽä¼šå¼•用的全局å˜é‡çš„æžä½³ä½¾|®ã€?/p>
awk ˜q˜æä¾›äº†å¦ä¸€ä¸ªç‰¹ŒDŠå—åQŒå«ä½?END å—。awk 在处ç†äº†è¾“入文äšgä¸çš„æ‰€æœ‰è¡Œä¹‹åŽæ‰§è¡Œ˜q™ä¸ªå—。通常åQŒEND å—用于执行最¾lˆè®¡½Ž—或打å°åº”该出现在输出浾l“尾的摘è¦ä¿¡æ¯ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
规则表达å¼å’Œå?/p>
awk å…许使用规则表达å¼ï¼Œæ ÒŽ®è§„åˆ™è¡¨è¾¾å¼æ˜¯å¦åŒ¹é…当å‰è¡Œæ¥é€‰æ‹©æ‰§è¡Œç‹¬ç«‹ä»£ç å—。以下示例脚本åªè¾“出包å«å—符åºåˆ— foo 的那些行åQ?/p>
/foo/ { print }
Â
当然åQŒå¯ä»¥ä‹Éç”¨æ›´å¤æ‚çš„è§„åˆ™è¡¨è¾‘Ö¼ã€‚ä»¥ä¸‹è„šæœ¬å°†åªæ‰“å°åŒ…嫿ÕQç‚ÒŽ•°çš„行åQ?/p>
/[0-9]+\.[0-9]*/ { print }
Â
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
表达å¼å’Œå?/p>
˜q˜æœ‰è®¸å¤šå…¶å®ƒæ–ÒŽ³•å¯ä»¥é€‰æ‹©æ‰§è¡Œä»£ç å—。我们å¯ä»¥å°†ä»ÀL„一¿U布ž®”表辑ּ攑֜¨ä¸€ä¸ªä»£ç å—之å‰åQŒä»¥æŽ§åˆ¶ä½•时执行æŸç‰¹å®šå—。仅当对å‰é¢çš„布ž®”表辑ּ求å€égؓ真时åQŒawk æ‰æ‰§è¡Œä»£ç å—。以下示例脚本输出将输出其第一个嗌D늉äº?fred 的所有行ä¸çš„½W¬ä¸‰ä¸ªå—ŒDüc€‚如果当å‰è¡Œçš„第一个嗌Dµä¸½{‰äºŽ fred åQŒawk ž®†ç‘ô¾lå¤„ç†æ–‡ä»¶è€Œä¸å¯¹å½“å‰è¡Œæ‰§è¡Œ print è¯å¥åQ?/p>
$1 == "fred" { print $3 }
Â
awk æä¾›äº†å®Œæ•´çš„æ¯”较˜qç®—½W¦é›†åˆï¼ŒåŒ…括 "=="ã€?<"ã€?>"ã€?<="ã€?>=" å’?"!="。å¦å¤–,awk ˜q˜æä¾›äº† "~" å’?"!~" ˜qç®—½W¦ï¼Œå®ƒä»¬åˆ†åˆ«è¡¨ç¤ºâ€œåŒ¹é…â€å’Œâ€œä¸åŒšw…â€ã€‚它们的用法是在˜qç®—½W¦å·¦è¾ÒŽŒ‡å®šå˜é‡ï¼Œåœ¨å³è¾ÒŽŒ‡å®šè§„则表辑ּ。如果æŸä¸€è¡Œçš„½W¬äº”个嗌DµåŒ…å«å—½W¦åºåˆ?root åQŒé‚£ä¹ˆä»¥ä¸‹ç¤ºä¾‹å°†åªæ‰“å°è¿™ä¸€è¡Œä¸çš„ç¬¬ä¸‰ä¸ªå—æ®µåQ?/p>
$5 ~ /root/ { print $3 }
Â
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
æ¡äšgè¯å¥
awk ˜q˜æä¾›äº†éžå¸¸å¥½çš„¾cÖM¼¼äº?C è¯è¨€çš?if è¯å¥ã€‚如果您愿æ„åQŒå¯ä»¥ä‹Éç”?if è¯å¥é‡å†™å‰ä¸€ä¸ªè„šæœ¬ï¼š
{
   if ( $5 ~ /root/ ) {
       print $3
   }
}
Â
˜q™ä¸¤ä¸ªè„šæœ¬çš„åŠŸèƒ½å®Œå…¨ä¸€æ —÷€‚第一个示例ä¸åQŒå¸ƒž®”表辑ּ攑֜¨ä»£ç å—外é¢ã€‚而在½W¬äºŒä¸ªç¤ºä¾‹ä¸åQŒå°†å¯ÒŽ¯ä¸€ä¸ªè¾“å…¥è¡Œæ‰§è¡Œä»£ç å—,而且我们使用 if è¯å¥æ¥é€‰æ‹©æ‰§è¡Œ print 命ä×o。这两个æ–ÒŽ³•都å¯ä»¥ä‹É用,å¯ä»¥é€‰æ‹©æœ€é€‚åˆè„šæœ¬å…¶å®ƒéƒ¨åˆ†çš„ä¸€¿U方法ã€?/p>
ä»¥ä¸‹æ˜¯æ›´å¤æ‚çš?awk if è¯å¥½CÞZ¾‹ã€‚å¯ä»¥çœ‹åˆŽÍ¼Œž®½ç®¡ä½¿ç”¨äº†å¤æ‚ã€åµŒå¥—çš„æ¡äšgè¯å¥åQ?if è¯å¥çœ‹ä¸ŠåŽÖM»ä¸Žç›¸åº”çš„ C è¯è¨€ if è¯å¥ä¸€æ øP¼š
{
   if ( $1 == "foo" ) {
       if ( $2 == "foo" ) {
           print "uno"
       } else {
           print "one"
       }
   } else if ($1 == "bar" ) {
       print "two"
   } else {
       print "three"
   }
}
Â
使用 if è¯å¥˜q˜å¯ä»¥å°†ä»£ç åQ?/p>
! /matchme/ { print $1 $3 $4 }
Â
è½¬æ¢æˆï¼š
{Â Â
   if ( $0 !~ /matchme/ ) {
       print $1 $3 $4
   }
}
Â
˜q™ä¸¤ä¸ªè„šæœ¬éƒ½åªè¾“å‡?ä¸?åŒ…å« matchme å—符åºåˆ—的那些行。æ¤å¤–,˜q˜å¯ä»¥é€‰æ‹©æœ€é€‚åˆæ‚¨çš„代ç 的方法。它们的功能完全相åŒã€?/p>
awk ˜q˜å…è®æ€‹É用布ž®”è¿½Ž—ç¬¦ "||"åQˆé€»è¾‘与)å’?"&&"åQˆé€»è¾‘或)åQŒä»¥ä¾¿åˆ›å»ºæ›´å¤æ‚的布ž®”表辑ּåQ?/p>
( $1 == "foo" ) && ( $2 == "bar" ) { print }
Â
˜q™ä¸ª½CÞZ¾‹åªæ‰“å°ç¬¬ä¸€ä¸ªå—ŒD늉äº?foo ä¸?½W¬äºŒä¸ªå—ŒD늉äº?bar 的那些行ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
数值å˜é‡ï¼
至今åQŒæˆ‘们䏿˜¯æ‰“å°å—½W¦ä¸²ã€æ•´è¡Œå°±æ˜¯ç‰¹å®šå—ŒDüc€‚然而,awk ˜q˜å…许我们执行整数和‹¹®ç‚¹˜q算。通过使用数å¦è¡¨è¾¾å¼ï¼Œå¯ä»¥å¾ˆæ–¹ä¾¿åœ°¾~–写计算文äšgä¸ç©ºç™½è¡Œæ•°é‡çš„è„šæœ¬ã€‚ä»¥ä¸‹å°±æ˜¯è¿™æ ·ä¸€ä¸ªè„šæœ¬ï¼š
BEGINÂ Â { x=0 }
/^$/Â Â Â { x=x+1 }
ENDÂ Â Â Â { print "I found " x " blank lines. :)" }
Â
åœ?BEGIN å—ä¸åQŒå°†æ•´æ•°å˜é‡ x åˆå§‹åŒ–æˆé›¶ã€‚ç„¶åŽï¼Œawk æ¯æ¬¡é‡åˆ°½Iºç™½è¡Œæ—¶åQŒawk ž®†æ‰§è¡?x=x+1 è¯å¥åQŒé€’增 x 。处ç†å®Œæ‰€æœ‰è¡Œä¹‹åŽåQŒæ‰§è¡?END å—,awk ž®†æ‰“å°å‡ºæœ€¾lˆæ‘˜è¦ï¼ŒæŒ‡å‡ºå®ƒæ‰¾åˆ°çš„½Iºç™½è¡Œæ•°é‡ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
å—符串化å˜é‡
awk 的优点之一ž®±æ˜¯â€œç®€å•å’Œå—符串化â€ã€‚æˆ‘è®¤äØ“ awk å˜é‡â€œå—½W¦ä¸²åŒ–â€æ˜¯å› äØ“æ‰€æœ?awk å˜é‡åœ¨å†…部都是按å—符串åÅžå¼å˜å‚¨çš„ã€‚åŒæ—Óž¼Œawk å˜é‡æ˜¯â€œç®€å•çš„â€ï¼Œå› 䨓å¯ä»¥å¯¹å®ƒæ‰§è¡Œæ•°å¦æ“作åQŒä¸”åªè¦å˜é‡åŒ…嫿œ‰æ•ˆæ•°å—å—符ä¸ÔŒ¼Œawk 会自动处ç†å—½W¦ä¸²åˆ°æ•°å—çš„è½¬æ¢æ¥éª¤ã€‚è¦ç†è§£æˆ‘的观点åQŒè¯·ç ”究以下˜q™ä¸ª½CÞZ¾‹åQ?/p>
x="1.01"
# We just set x to contain the *string* "1.01"
x=x+1
# We just added one to a *string*
print x
# Incidentally, these are comments :)
Â
awk ž®†è¾“出:
2.01
Â
有趣å§ï¼è™½ç„¶ž®†å—½W¦ä¸²å€?1.01 赋值给å˜é‡ x åQŒæˆ‘们ä»ç„¶å¯ä»¥å¯¹å®ƒåŠ ä¸€ã€‚ä½†åœ?bash å’?python ä¸å´ä¸èƒ½˜q™æ ·åšã€‚首先,bash 䏿”¯æŒæÕQç‚¹è¿½Ž—ã€‚è€Œä¸”åQŒå¦‚æž?bash 有“嗽W¦ä¸²åŒ–â€å˜é‡ï¼Œå®ƒä»¬òq¶ä¸â€œç®€å•â€ï¼›è¦æ‰§è¡Œä“Qä½•æ•°å¦æ“作,bash è¦æ±‚我们ž®†æ•°å—放åˆîC¸‘陋的 $( ) ) ¾l“æž„ä¸ã€‚如果ä‹Éç”?pythonåQŒåˆ™å¿…须在对 1.01 å—符串执行ä“Q何数å¦è¿½Ž—之å‰ï¼Œž®†å®ƒè½¬æ¢æˆæÕQ点倹{€‚虽然这òq¶ä¸å›°éš¾åQŒä½†å®ƒä»æ˜¯é™„åŠ çš„æ¥éª¤ã€‚如果ä‹Éç”?awkåQŒå®ƒæ˜¯å…¨è‡ªåŠ¨çš„ï¼Œè€Œé‚£ä¼šä‹É我们的代ç åˆå¥½åˆæ•´æ´ã€‚如果想è¦å¯¹æ¯ä¸ªè¾“入行的½W¬ä¸€ä¸ªå—ŒDµä¹˜æ–¹åÆˆåŠ ä¸€åQŒå¯ä»¥ä‹É用以下脚本:
{ print ($1^2)+1 }
Â
如果åšä¸€ä¸ªå°å®žéªŒåQŒå°±å¯ä»¥å‘现如果æŸä¸ªç‰¹å®šå˜é‡ä¸åŒ…嫿œ‰æ•ˆæ•°å—,awk 在对数å¦è¡¨è¾¾å¼æ±‚值时会将该å˜é‡å½“作数å—零处ç†ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
众多˜qç®—½W?/p>
awk çš„å¦ä¸€ä¸ªä¼˜ç‚ÒŽ˜¯å®ƒæœ‰å®Œæ•´çš„æ•°å¦è¿½Ž—符集åˆã€‚é™¤äº†æ ‡å‡†çš„åŠ ã€å‡ã€ä¹˜ã€é™¤åQŒawk ˜q˜å…è®æ€‹É用å‰é¢æ¼”½Cø™¿‡çš„æŒ‡æ•°è¿½Ž—符 "^"ã€æ¨¡åQˆä½™æ•ŽÍ¼‰˜qç®—½W?"%" 和其它许多从 C è¯è¨€ä¸å€Ÿå…¥çš„æ˜“于ä‹É用的赋值æ“作符ã€?/p>
˜q™äº›˜qç®—½W¦åŒ…括å‰åŽåŠ å‡ï¼ˆ i++ ã€?--foo åQ‰ã€åŠ åQå‡åQ乘åQé™¤èµ‹å€ÆD¿½Ž—符åQ?a+=3 ã€?b*=2 ã€?c/=2.2 ã€?d-=6.2 åQ‰ã€‚ä¸ä»…如æ?-- 我们˜q˜æœ‰æ˜“于使用的模åQæŒ‡æ•°èµ‹å€ÆD¿½Ž—符åQ?a^=2 ã€?b%=4 åQ‰ã€?/p>
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
å—æ®µåˆ†éš”½W?/p>
awk 有它自己的特ŒDŠå˜é‡é›†åˆã€‚å…¶ä¸ä¸€äº›å…许调æ•?awk çš„è¿è¡Œæ–¹å¼ï¼Œè€Œå…¶å®ƒå˜é‡å¯ä»¥è¢«è¯Õd–以收集关于输入的有用信æ¯ã€‚我们已¾l接触过˜q™äº›ç‰ÒŽ®Šå˜é‡ä¸çš„一个,FS。å‰é¢å·²¾læåˆ°è¿‡åQŒè¿™ä¸ªå˜é‡è®©æ‚¨å¯ä»¥è®¾¾|?awk è¦æŸ¥æ‰„¡š„å—æ®µä¹‹é—´çš„å—½W¦åºåˆ—。我们ä‹Éç”?/etc/passwd ä½œäØ“è¾“å…¥æ—Óž¼Œž®?FS 讄¡½®æˆ?":"。当˜q™æ ·åšæœ‰é—®é¢˜æ—Óž¼Œæˆ‘们˜q˜å¯ä»¥æ›´ç‰|´»åœîC‹Éç”?FSã€?/p>
FS å€¼åÆˆæ²¡æœ‰è¢«é™åˆ¶äØ“å•一å—符åQ›å¯ä»¥é€šè¿‡æŒ‡å®šä»ÀL„长度的嗽W¦æ¨¡å¼ï¼Œž®†å®ƒè®„¡½®æˆè§„则表辑ּ。如果æ£åœ¨å¤„ç†ç”±ä¸€ä¸ªæˆ–多个 tab 分隔的嗌Dµï¼Œæ‚¨å¯èƒ½å¸Œæœ›æŒ‰ä»¥ä¸‹æ–¹å¼è®„¡½® FSåQ?/p>
FS="\t+"
Â
以上½CÞZ¾‹ä¸ï¼Œæˆ‘们使用ç‰ÒޮР"+" 规则表达å¼å—½W¦ï¼Œå®ƒè¡¨½Cºâ€œä¸€ä¸ªæˆ–多个å‰ä¸€å—符â€ã€?/p>
å¦‚æžœå—æ®µç”Þq©ºæ ¼åˆ†éš”(一个或多个½Iºæ ¼æˆ?tabåQ‰ï¼Œæ‚¨å¯èƒ½æƒ³è¦å°† FS 讄¡½®æˆä»¥ä¸‹è§„则表辑ּåQ?/p>
FS="[[:space:]+]"
Â
˜q™ä¸ªèµ‹å€ÆD¡¨è¾‘ּ也有问题åQŒå®ƒòq‰™žå¿…è¦ã€‚äØ“ä»€ä¹ˆï¼Ÿå› äØ“¾~ºçœæƒ…况下,FS 讄¡½®æˆå•一½Iºæ ¼å—符åQŒawk ž®†è¿™è§£é‡Šæˆè¡¨½Cºâ€œä¸€ä¸ªæˆ–多个½Iºæ ¼æˆ?tabâ€ã€‚在˜q™ä¸ªç‰ÒޮнCÞZ¾‹ä¸ï¼Œ¾~ºçœ FS 讄¡½®æ°æ°æ˜¯æ‚¨æœ€æƒŒ™¦çš„ï¼
夿‚çš„è§„åˆ™è¡¨è¾‘Ö¼ä¹Ÿä¸æˆé—®é¢˜ã€‚å³ä½¿æ‚¨çš„记录由å•è¯ "foo" 分隔åQŒåŽé¢è·Ÿç€ä¸‰ä¸ªæ•°å—åQŒä»¥ä¸‹è§„则表辑ּä»å…许对数殘q›è¡Œæ£ç¡®çš„分æžï¼š
FS="foo[0-9][0-9][0-9]"
Â
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
å—æ®µæ•°é‡
æŽ¥ç€æˆ‘们è¦è®¨è®ºçš„两个å˜é‡é€šå¸¸òq¶ä¸æ˜¯éœ€è¦èµ‹å€¼çš„åQŒè€Œæ˜¯ç”¨æ¥è¯Õd–以获å–关于输入的有用信æ¯ã€‚第一个是 NF å˜é‡åQŒä¹Ÿå«åšâ€œå—ŒD‰|•°é‡â€å˜é‡ã€‚awk 会自动将该å˜é‡è®¾¾|®æˆå½“å‰è®°å½•ä¸çš„å—æ®µæ•°é‡ã€‚å¯ä»¥ä‹Éç”?NF å˜é‡æ¥åªæ˜„¡¤ºæŸäº›è¾“入行:
NF == 3 { print "this particular record has three fields: " $0 }
Â
当然åQŒä¹Ÿå¯ä»¥åœ¨æ¡ä»¶è¯å¥ä¸ä½¿ç”¨ NF å˜é‡åQŒå¦‚下:
{Â Â
   if ( NF > 2 ) {
       print $1 " " $2 ":" $3
   }
}
Â
Â
Â
åQ+åQ+åQ+åQ+åQ+åQ+åQ+åQ?br />Â
Â
记录å?/p>
记录å?(NR) 是å¦ä¸€ä¸ªæ–¹ä¾¿çš„å˜é‡ã€‚它始终包å«å½“å‰è®°å½•的编åøP¼ˆawk ž®†ç¬¬ä¸€ä¸ªè®°å½•ç®—ä½œè®°å½•å· 1åQ‰ã€‚è¿„ä»ŠäØ“æ¢ï¼Œæˆ‘们已ç»å¤„ç†äº†æ¯ä¸€è¡ŒåŒ…å«ä¸€ä¸ªè®°å½•的输入文äšg。对于这些情况,NR ˜q˜ä¼šå‘Šè¯‰æ‚¨å½“å‰è¡Œå—÷€‚然而,当我们在本系列以åŽéƒ¨åˆ†ä¸å¼€å§‹å¤„ç†å¤šè¡Œè®°å½•æ—¶åQŒå°±ä¸ä¼šå†æœ‰˜q™ç§æƒ…况åQŒæ‰€ä»¥è¦æ³¨æ„åQå¯ä»¥è±¡ä½¿ç”¨ NF å˜é‡ä¸€æ ·ä‹Éç”?NR æ¥åªæ‰“å°æŸäº›è¾“入行:
(NR < 10 ) || (NR > 100) { print "We are on record number 1-9 or 101+" }
Â
å¦ä¸€ä¸ªç¤ºä¾‹ï¼š
{
   #skip header
   if ( NR > 10 ) {
       print "ok, now for the real information!"
   }
}
Â
今天工作需è¦ï¼Œå…¶å®žž®±æ˜¯ä¸€è¡Œå‘½ä»¤ï¼Œ
比如è¦å°†æ‰€æœ‰åŒ…å«abcæ–‡äšg里é¢çš„abc替æ¢ä¸ºdef
å¦‚æžœè¦æŠŠå目录的内容一èµäh›¿æ?/p>
˜q™ä¸¤å¤©åœ¨æž„å¾ä¸€ä¸ªåº”用的使用用到了maven,ç”׃ºŽproject很大,‘Œ™ƒöæœ?00多个pom.xmlæ–‡äšg,æ›´éƒé—ïLš„æ˜¯åœ¨å¾ˆå¤špom.xmlæ–‡äšg里都å•独指定了资æºåº“çš„url,æˆ‘éœ€è¦æŠŠ˜q™äº›èµ„æºåº“çš„url¾lŸä¸€æŒ‡å®šåˆ°nexus本地ä¸å¤®åº?
手工一个个æ”ÒŽ–‡ä»‰™…¾|®æœ‰ç‚¹ä¸å¤ªå®žé™?所以google了一ä¸?扑ֈ°æ‰šw‡æ›¿æ¢æ–‡äšg内容的好æ–ÒŽ³•,命ä×o¾l“构如下:
find -name 'è¦æŸ¥æ‰„¡š„æ–‡äšgå? | xargs perl -pi -e 's|被替æ¢çš„å—符串|替æ¢åŽçš„å—符串|g'
下题q™ä¸ªä¾‹åž®±æ˜¯ž®†å½“å‰ç›®å½•åŠæ‰€æœ‰å目录下的所有pom.xmlæ–‡äšgä¸çš„”http://repo1.maven.org/maven2“替æ¢ä¸?#8221;http://localhost:8081/nexus/content/groups/public“.
find -name 'pom.xml' | xargs perl -pi -e 's|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g'
˜q™é‡Œç”¨åˆ°äº†Perlè¯è¨€,
perl -pi -e
在Perl 命ä×oä¸åŠ ä¸?e 选项åQŒåŽè·Ÿä¸€è¡Œä»£ç ,那它ž®×ƒ¼šåƒè¿è¡Œä¸€ä¸ªæ™®é€šçš„Perl è„šæœ¬é‚£æ ·˜q行该代ç ?
从命令行ä¸ä‹É用Perl 能够帮助实现一些强大的ã€å®žæ—¶çš„转æ¢ã€‚è®¤çœŸç ”½I¶æ£åˆ™è¡¨è¾‘Ö¼åQŒåƈæ£ç¡®åœîC‹É用,ž®†ä¼šä¸ºæ‚¨çœå޻大é‡çš„æ‰‹å·¥ç¼–辑工作ã€?/p>
  功能åQšåœ¨ç›®å½•¾l“æž„ä¸æœç´¢æ–‡ä»Óž¼Œòq¶æ‰§è¡ŒæŒ‡å®šçš„æ“ä½œã€‚æ¤å‘½ä×oæä¾›äº†ç›¸å½“多的查找æ¡ä»Óž¼ŒåŠŸèƒ½å¾ˆå¼ºå¤§ã€?
ã€€ã€€è¯æ³•åQšfind 起始目录 å¯ÀL‰¾æ¡äšg æ“作
  说明åQšfind命ä×o从指定的起始目录开始,递归地æœç´¢å…¶å„个å目录,查找满èƒöå¯ÀL‰¾æ¡äšgçš„æ–‡ä»¶åÆˆå¯¹ä¹‹é‡‡å–相关的æ“作ã€?
  该命令æä¾›çš„å¯ÀL‰¾æ¡äšgå¯ä»¥æ˜¯ä¸€ä¸ªç”¨é€»è¾‘˜qç®—½W¦notã€andã€or¾l„æˆçš„å¤åˆæ¡ä»¶ã€‚逻辑˜qç®—½W¦andã€orã€notçš„å«ä¹‰äØ“åQ?
  åQ?åQ‰andåQšé€»è¾‘与,在命令ä¸ç”?#8220;-a”表示åQŒæ˜¯¾pÈ»Ÿ¾~ºçœçš„选项åQŒè¡¨½Cºåªæœ‰å½“所¾l™çš„æ¡äšg都满‘Ïx—¶åQŒå¯»æ‰¾æ¡ä»¶æ‰½Ž—满‘Ÿë€‚例如:
  $ find –name ’tmp’ –xtype c -user ’inin’
  该命令寻找三个给定æ¡ä»‰™ƒ½æ»¡èƒö的所有文件ã€?
  åQ?åQ‰oråQšé€»è¾‘或,在命令ä¸ç”?#8220;-o”表示。该˜qç®—½W¦è¡¨½Cºåªè¦æ‰€¾l™çš„æ¡äšg䏿œ‰ä¸€ä¸ªæ»¡‘Ïx—¶åQŒå¯»æ‰¾æ¡ä»¶å°±½Ž—满‘Ÿë€?
  例如åQ?
  $ find –name ’tmp’ –o –name ’mina*’
  该命令查询文件åä¸?#8217;tmp’或是匚w…’mina*’的所有文件ã€?
  åQ?åQ‰notåQšé€»è¾‘éžï¼Œåœ¨å‘½ä»¤ä¸ç”?#8220;åQ?#8221;表示。该˜qç®—½W¦è¡¨½CºæŸ¥æ‰¾ä¸æ»¡èƒö所¾l™æ¡ä»¶çš„æ–‡äšgã€?
  例如åQ?
  $ find ! –name ’tmp’
  该命令查询文件å䏿˜¯’tmp’的所有文件ã€?
  需è¦è¯´æ˜Žçš„æ˜¯ï¼šå½“ä‹É用很多的逻辑选项æ—Óž¼Œå¯ä»¥ç”¨æ‹¬åähŠŠ˜q™äº›é€‰é¡¹æ‹¬è“væ¥ã€‚äØ“äº†é¿å…Shell本èínå¯ÒŽ‹¬å·å¼•赯‚¯¯è§£ï¼Œåœ¨è¯å·å‰éœ€è¦åŠ è½¬ä¹‰å—符“\\”æ¥åŽ»é™¤æ‹¬åïLš„æ„ä¹‰ã€?
  例:$ find \\åQ?#8211;name ’tmp’ –xtype c -user ’inin’ \\åQ?å¯ÀL‰¾æ¡äšg有以下选项åQ?
  首先åQŒä¸‹åˆ—å„个选项ä¸çš„n值å¯ä»¥æœ‰ä¸‰ç§è¾“入方å¼åQŒå‡è®¾nä¸?0åQŒåˆ™åQ?
  +20 表示20以åŽåQ?1åQ?2åQ?3½{‰ï¼‰
  -20 表示20以å‰åQ?9åQ?8åQ?7½{‰ï¼‰
  20 表示æ£å¥½æ˜?0
  1. 以å¿U°å’Œæ–‡äšg属性查找ã€?
  - name ’å—串’ 查找文äšgååŒ¹é…æ‰€¾l™å—串的所有文ä»Óž¼Œå—串内å¯ç”¨é€šé…½W?ã€?ã€[ ]ã€?
  - lname ’å—串’ 查找文äšgååŒ¹é…æ‰€¾l™å—串的所有符å·é“¾æŽ¥æ–‡ä»Óž¼Œå—串内å¯ç”¨é€šé…½W?ã€?ã€[ ]ã€?
  -gid n 查找属于IDå·äØ“n的用æˆïL»„的所有文件ã€?
  -uid n 查找属于IDå·äØ“n的用æˆïLš„æ‰€æœ‰æ–‡ä»¶ã€?
  -group ’å—串’ 查找属于用户¾l„å为所¾l™å—串的所有的文äšgã€?
  -user ’å—串’ 查找属于用户åäØ“æ‰€¾l™å—串的所有的文äšgã€?
  -empty 查找大å°ä¸?的目录或文äšgã€?
  -path ’å—串’ 查找路径ååŒ¹é…æ‰€¾l™å—串的所有文ä»Óž¼Œå—串内å¯ç”¨é€šé…½W?ã€?ã€[ ]ã€?
  -perm æƒé™ 查找å…ähœ‰æŒ‡å®šæƒé™çš„æ–‡ä»¶å’Œç›®å½•åQŒæƒé™çš„表示å¯ä»¥å¦?11åQ?44ã€?
  -size n[bckw] 查找指定文äšg大å°çš„æ–‡ä»Óž¼ŒnåŽé¢çš„å—½W¦è¡¨½Cºå•ä½ï¼Œ¾~ºçœä¸ºbåQŒä»£è¡?12å—节的å—ã€?
  -type x 查找¾cÕdž‹ä¸ºx的文ä»Óž¼Œxä¸ÞZ¸‹åˆ—å—½W¦ä¹‹ä¸€åQ?
  b å—设备文ä»?
  c å—符讑֤‡æ–‡äšg
  d 目录文äšg
  p 命彎¡é“åQˆFIFOåQ?
  f 普通文�
  l ½W¦å·é“¾æŽ¥æ–‡äšgåQˆsymbolic linksåQ?
  s socketæ–‡äšg
  -xtype x ä¸?type基本相åŒåQŒä½†åªæŸ¥æ‰„¡¬¦å·é“¾æŽ¥æ–‡ä»¶ã€?
  2. ä»¥æ—¶é—´äØ“æ¡äšg查找
  - amin n 查找n分钟以å‰è¢«è®¿é—®è¿‡çš„æ‰€æœ‰æ–‡ä»¶ã€?
  - atime n 查找n天以å‰è¢«è®‰K—®˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?
  - cmin n 查找nåˆ†é’Ÿä»¥å‰æ–‡äšg状æ€è¢«ä¿®æ”¹˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?
  - ctime n 查找n天以剿–‡ä»¶çжæ€è¢«ä¿®æ”¹˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?
  - mmin n 查找nåˆ†é’Ÿä»¥å‰æ–‡äšg内容被修改过的所有文件ã€?
  - mtime n 查找n天以剿–‡ä»¶å†…容被修改˜q‡çš„æ‰€æœ‰æ–‡ä»¶ã€?
  3. 坿‰§è¡Œçš„æ“ä½œ
  - exec 命ä×oåç§° {} å¯¹ç¬¦åˆæ¡ä»¶çš„æ–‡äšg执行所¾l™çš„Linux 命ä×oåQŒè€Œä¸è¯¢é—®ç”¨æˆ·æ˜¯å¦éœ€è¦æ‰§è¡Œè¯¥å‘½ä×o。{}表示命ä×oçš„å‚æ•°å³ä¸ºæ‰€æ‰‘Öˆ°çš„æ–‡ä»Óž¼›å‘½ä×o的末ž®‘Ö¿…™åÖM»¥“ \\åQ?#8221;¾l“æŸã€?
  - ok 命ä×oåç§° { } å¯¹ç¬¦åˆæ¡ä»¶çš„æ–‡äšg执行所¾l™çš„Linux 命ä×oåQŒä¸Žexecä¸åŒçš„æ˜¯åQŒå®ƒä¼šè¯¢é—®ç”¨æˆäh˜¯å¦éœ€è¦æ‰§è¡Œè¯¥å‘½ä×oã€?
  - ls 详细列出所扑ֈ°çš„æ‰€æœ‰æ–‡ä»¶ã€?
  - fprintf æ–‡äšgå?ž®†æ‰¾åˆ°çš„æ–‡äšgå写入指定文件ã€?
  - print åœ¨æ ‡å‡†è¾“å‡ø™®¾å¤‡ä¸Šæ˜„¡¤ºæŸ¥æ‰¾å‡ºçš„æ–‡äšgåã€?
  - printf æ ¼å¼ æ ¼å¼çš„写法请å‚考有关Cè¯è¨€çš„书ã€?
  ä¾?åQšæŸ¥æ‰‘Ö½“å‰ç›®å½•䏿‰€æœ‰ä»¥main开头的文äšgåQŒåƈ昄¡¤º˜q™äº›æ–‡äšg的内å®V€?
  $ find . - name ‘main*’ - exec more {} \\;
  ä¾?åQšåˆ 除当å‰ç›®å½•下所有一周之内没有被讉K—®˜q‡çš„a .outæˆ?.oæ–‡äšgã€?
  $ find . \\åQ? name a.out - o - name ‘*.o’\\åQ‰\\
  > - atime +7 - exec rm {} \\;
  说明如下åQ?命ä×oä¸çš„“.”表示当å‰ç›®å½•åQŒæ¤æ—¶findž®†ä»Žå½“å‰ç›®å½•开始,é€ä¸ªåœ¨å…¶åç›®å½•ä¸æŸ¥æ‰¾æ»¡èƒöåŽé¢æŒ‡å®šæ¡äšg的文件。\\åQˆå’Œ\\åQ‰è¡¨½Cºæ‹¬åøP¼ˆåQ‰ï¼Œå…¶ä¸çš?#8220;\\”¿UîCؓ转义½W¦ã€‚ä¹‹æ‰€ä»¥è¿™æ ·å†™æ˜¯ç”±äºŽå¯¹Shell而言åQŒï¼ˆå’Œï¼‰å¦æœ‰ä¸åŒçš„å«ä¹‰ï¼Œè€Œä¸æ˜¯è¿™é‡Œçš„用于¾l„åˆæ¡äšg的用途ã€?#8220;- name a.out”æ˜¯æŒ‡è¦æŸ¥æ‰‘Ö为a.out的文ä»Óž¼›“- name ‘*.o’”æ˜¯æŒ‡è¦æŸ¥æ‰¾æ‰€æœ‰åå—以 .o¾l“尾的文件。这两个- name之间çš? o表示逻辑或(oråQ‰ï¼ŒåÏxŸ¥æ‰‘Öå—䨓a.out或åå—以 .o¾l“尾的文ä»Óž¼Œfind在当å‰ç›®å½•åŠå…¶å目录下找到这佯的文äšg之åŽåQŒå†˜q›è¡Œåˆ¤æ–åQŒçœ‹å…¶æœ€åŽè®¿é—®æ—¶é—´æ˜¯å¦åœ¨7天以å‰ï¼ˆæ¡äšgåQatime +7åQ‰ï¼Œè‹¥æ˜¯åQŒåˆ™å¯¹è¯¥æ–‡äšg执行命ä×ormåQ? exec rm{ }\\;åQ‰ã€‚å…¶ä¸{ }ä»£è¡¨å½“å‰æŸ¥åˆ°çš„ç¬¦åˆæ¡ä»¶çš„æ–‡äšgå,\\åQ›åˆ™æ˜¯è¯æ³•æ‰€è¦æ±‚的。上˜q°å‘½ä»¤ä¸½W¬ä¸€è¡Œçš„æœ€åŽä¸€ä¸ª\\是箋行符。当命ä×o太长而在一行写ä¸ä¸‹æ—Óž¼Œå¯è¾“入一个\\åQŒä¹‹åŽç³»¾lŸå°†æ˜„¡¤ºä¸€ä¸?gt;åQŒæŒ‡½Cºç”¨æˆïL‘ô¾l输入命令ã€?
  locate命ä×o
  locate命ä×o用于查找文äšgåQŒå®ƒæ¯”find命ä×oçš„æœç´¢é€Ÿåº¦å¿«ï¼Œå®ƒéœ€è¦ä¸€ä¸ªæ•°æ®åº“åQŒè¿™ä¸ªæ•°æ®åº“ç”±æ¯å¤©çš„例行工作åQˆcrontabåQ‰ç¨‹åºæ¥å»ºç«‹ã€‚当我们建立好这个数æ®åº“åŽï¼Œž®±å¯ä»¥æ–¹ä¾¿åœ°æ¥æœå¯ÀL‰€éœ€æ–‡äšg了ã€?
  该命令的一般åÅžå¼äØ“åQ?
  locate 相关å?
  例如åQšæŸ¥æ‰„¡›¸å…›_—issue
  $ locate issue
  /etc/issue
  /etc/issue.net
  /usr/man/man5/issue.5
  /usr/man/man5/issue.net.5 �
在unixçŽ¯å¢ƒä¸æˆ‘们å¯ä»¥ä‹Éç”¨ä¸€ä¸‹å‘½ä»¤æ¥æ‰“å°å‡ºç¬¬ä¸€åˆ?br />
[root@mail awk]# awk '{print $1}' example1.txt
得到的结果是如下åQŒè§£é‡Šä¸€ä¸?'{" å•引å·å¤§æ‹¬å·åŒ…å«awkè¯å¥æ˜¯äؓ了和shell 命ä×o区别åQ?1çš„æ„æ€å°±æ˜¯æ–‡æœ¬æ–‡ä»¶çš„½W¬ä¸€åˆ—,æ£å¸¸çš„awk命ä×oè·Ÿéš-F傿•°æŒ‡å®šé—´éš”½W¦å·åQŒå¦‚果是½Iºæ ¼æˆ–tab键就å¯ä»¥çœç•¥äº†ã€?br />
user1
user2
user3
[root@mail awk]# awk '{if($5>20) {print $1}}' example1.txt
˜q™è¡Œå‘½ä×oå’Œä¸Šä¸€è¡Œæ¯”è¾ƒå¢žåŠ äº†“if($5>20)”åQŒå¾—到的¾l“æžœæ˜?/p>
user3
˜q™ä¸ªifè¯å¥ž®±æ²¡æœ‰å¿…è¦æ›´è¯¦ç»†çš„解释了å§ï¼ž®±æ˜¯½W?列大äº?0的显½Cºå‡ºæ»¡èƒöæ¡äšg的第一åˆ?/p>
[root@mail awk]# awk '{if($5>20 || $5==10) {print $1}}' example1.txt
user1
user3
在æ¥ä¸€ä¸ªåˆ¾U§çš„åˆå¢žåŠ äº†ä¸€ä¸?#8220;if($5>20 || $5==10)” åšé€»è¾‘判æ–逻辑判æ–的三ä¸?#8220;|| && !” 或ã€ä¸Žã€éžä¸‰ä¸ªå¯ä»¥ä»ÀL„åŠ åˆ°é‡Œé¢åQŒè¿™ä¸ªè¯å¥çš„æ„æ€æ˜¯å¦‚æžœ½W?列大äº?0或者ç‰äº?0的都昄¡¤ºå¤„ç†åQŒåœ¨æˆ‘们的工作ä¸å¯èƒ½æœ‰ç”¨æˆ·ä¼šè¦æ±‚扑ևºæ‰€æœ‰ç©ºé—´å¤§äºŽå¤šž®‘的或者是½Iºé—´½{‰äºŽå¤šå°‘çš„èÌŽæˆïL„¶åŽå†å𿉹é‡ä¿®æ”V€?/p>
if是awk循环ä¸çš„一个还有其他很多,man awkå¯ä»¥çœ‹åˆ°åQ?br />
Control Statements
The control statements are as follows:
if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
delete array[index]
delete array
exit [ expression ]
{ statements }
å¦ä¹ awkå¯ä»¥¾l常使用一下man awk å¯ä»¥çœ‹åˆ°æ‰€æœ‰çš„函数和ä‹É用方法ã€?nbsp;
了解æ¯ä¸ª½W¦å·çš„æ„ä¹‰æˆ‘ä»¬æ‰èƒ½æ›´å¥½çš„使用awkåQŒæœ€å¼€å§‹å…ˆè®îC½å‡ 个命ä×o知é“ä»–å¯å®žçŽ°çš„ç»“æžœæˆ‘ä»¬æ…¢æ…¢çš„å†åŽ»ç†è§£ã€?br /> ================================================================================
awkä¸çñ”½‹?/p>
˜q™é‡Œ™åÞZ¾¿ä»‹ç»ä¸€ä¸‹vi的一个替æ¢å‘½ä»¤ï¼ŒçŽ°åœ¨æˆ‘ä»¬è¦æŠŠexample1.txt文本里的½Iºæ ¼éƒ½æ›¿æ¢äØ““:”冒巘q™é‡Œåœ¨vi里ä‹É用的命ä×ož®±æ˜¯åQ?/p>
%s/ /:/g
˜q™ä¸ªå‘½ä×o对于使用viçš„ähæ¥è¯´æ˜¯ç”¨å¾—最多的。我们现在åšäº†ä¸€ä¸ªæ–°çš„æ–‡ä»¶example2.txtã€?/p>
user1:password1:username1:unit1:10
user2:password2:username2:unit2:20
user3:password3:username3:unit3:30
现在我们æ¥åšä¸€ä¸ªawk脚本åQŒä¹‹å‰éƒ½æ˜¯åœ¨å‘½ä×o行æ“作,实际上所有的æ“作在命令行上是å¯ä»¥éƒ½å®žçŽ°çš„åQŒå·²æˆ‘们最¾lå¸¸ä½¿ç”¨çš„æ‰¹é‡æ·»åŠ ç”¨æˆäh¥å¼€å§‹ï¼script1.awk
#!/bin/awk -f # å½“æ–‡ä»¶æœ‰å¯æ‰§è¡Œæƒé™çš„æ—¶å€™ä½ å¯ä»¥ç›´æŽ¥æ‰§è¡Œ
# ./script1.awk example2.txt
# 如果没有以上˜q™è¡Œå¯èƒ½ä¼šå‡ºçŽ°é”™è¯¯ï¼Œæˆ–è€?br />
# awk -f script1.awk example2.txt 傿•°f指脚本文ä»?
BEGIN { # “BEGIN{”是awk脚本开始的地方
FS=":"; # FS 是在awk里指分割½W¦çš„æ„æ€?br />
}
{ # 接下æ¥çš„“{” 是内定wƒ¨åˆ?br />
print "add {"; # 一下都是ä‹É用了一个awk函数print
print "uid=" $1;
print "userPassword=" $2;
print "domain=eyou.com" ;
print "bookmark=1";
print "voicemail=1";
print "securemail=1"
print "storage=" $5;
print "}";
print ".";
} # “}” 内容部分¾l“æŸ
END { # “END{” ¾l“æŸéƒ¨åˆ†
print "exit";
}
执行¾l“æžœ
[root@mail awk]# awk -f script1.awk example2.txt
add {
uid=user1
userPassword=password1
domain=eyou.com
bookmark=1
voicemail=1
securemail=1
storage=10
}
.
.
.
.
.
.
exit
文本æ“作ž®±æ˜¯æ›´æ–¹ä¾¿ä¸€äº›ã€?/p>
下颾l™ä¸¤ä¸ªè¿”回效果一æ ïLš„例å
[root@mail awk]# awk -F: '{print $1"@"$2}' example2.txt
[root@mail awk]# awk -F: '{printf "%s@%s\n",$1,$2}' example2.txt
user1@password1
˜q™é‡Œçš„区别是使用print å’Œprintf的区别,printfæ ¼å¼æ›´è‡ªç”׃¸€äº›ï¼Œæˆ‘们å¯ä»¥æ›´åŠ è‡ªç”±çš„æŒ‡å®šè¦è¾“出的数æ®ï¼Œprint会自动在行尾¾l™å‡º½Iºæ ¼åQŒè€Œprintf是需è¦ç»™å®?\n"的,如果感兴‘£ä½ å¯ä»¥æŠ?#8220;\n”åŽÀLŽ‰çœ‹ä¸€ä¸‹ç»“æžœã€?s代表å—符ä¸?d 代表数å—åQŒåŸºæœ¬ä¸Š%s都å¯ä»¥å¤„ç†äº†å› äØ“åœ¨æ–‡æœ¬é‡Œä¸€åˆ‡éƒ½å¯ä»¥çœ‹æˆæ˜¯å—½W¦ä¸²åQŒä¸åƒCè¯è¨€½{‰å…¶ä»–è¯a€˜q˜è¦åŒºåˆ†æ•°å—ã€å—½W¦ã€å—½W¦ä¸²½{‰ã€?/p>
æ–‡ç« å‡ºå¤„åQšhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688.html
awk˜q˜æœ‰ä¸€äº›å¾ˆå¥½çš„函数¾l†ç»†ç ”究一下还是很好用的ã€?br /> ˜q™æ¬¡¼„°åˆ°äº†ä¸€ä¸ªé—®é¢˜å®¢æˆähœ‰ä¸€ä¸ªç”¨æˆ·åˆ—è¡?大概æœ?w用户åQŒä»–有一个有‘£çš„工作è¦åšåQŒå°±æ˜¯æŠŠæ¯ä¸ªè´¦æˆ·ç›®å½•攑ֈ°ç‰¹å®šçš„目录下åQŒä¾‹å¦?3910011234˜q™ä¸ªç›®å½•è¦æ”¾åˆ?39/10/˜q™ä¸ªç›®å½•下,从这里å¯ä»¥çœ‹å‡ø™§„律是手机åïL çš„å‰ä¸‰ä½æ˜¯äºŒ¾U§ç›®å½•ååQŒæ‰‹æœºçš„½W?ã€?为是三çñ”目录å,我们有的ž®±åªæœ‰ä¸€ä¸ªç”¨æˆ·åˆ—表,规律扑ֈ°äº†æˆ‘们现在开始想办法处ç†å§ã€?/p>
example3.txt
13910011234
15920312343
13922342134
15922334422
......
½W¬ä¸€æ¥æ˜¯è¦æ‰¾åˆîC¸€ä¸ªæ–¹æ³•æ¥å§ï¼Œž®±æ˜¯è¦æŠŠæ¯ä¸€ä¸ªæ‰‹æœºå·åˆ†å¼€åQŒæœ€åˆå¯èƒ½ä½ ž®×ƒ¼šæƒ›_ˆ°˜q™ä¸ªä¹Ÿæ²¡æœ‰ä“Q何间隔,我们怎么用awkåˆ†å¼€ä»–ä»¬å‘¢ï¼Ÿè¯´å®žè¯æœ€åˆæˆ‘也考虑äº?0å¤šåˆ†é’Ÿï¼ŒåŽæ¥æƒŒ™“v原æ¥å¦ä¹ python的时候有split函数å¯ä»¥åˆ†å°±æƒÏx‰¾æ‰¾awké‡Œæ˜¯ä¸æ˜¯æœ‰ç±»ä¼¼çš„函数åQŒman awk å‘现substr ˜q™ä¸ªå‡½æ•°å串,
[root@mail awk]# awk '{print substr($1,1,3)}' example3.txt
[root@mail awk]# awk '{printf "%s/%s\n",substr($1,1,3),substr($1,4,2)}' example3.txt
[root@mail awk]# awk '{printf "mv %s %s/%s\n",$1,substr($1,1,3),substr($1,4,2)}' example3.txt
以上的两æ¥çš„˜q”回自己åšä¸€ä¸‹ï¼Œæœ€åŽæˆ‘们就得到了我们想è¦çš„¾l“æžœã€?/p>
mv 13910011234 139/10
mv 15920312343 159/20
mv 13922342134 139/22
mv 15922334422 159/22
把这部分输出拯‚´åˆîC¸€ä¸ªshell脚本里,在数æ®å½“å‰ç›®å½•下执行ž®±å¯ä»¥äº†åQ?/p>
substr(s, i [, n]) Returns the at most n-character substring of s
starting at i. If n is omitted, the rest of s
is used.
substr函数解释åQŒs代表我们è¦å¤„ç†çš„å—符ä¸ÔŒ¼Œi 是我们从˜q™ä¸ªå—符串的½W¬å‡ 个佾|®ä¸Šå¼€å§‹ï¼Œn 是我们从开始的ä½ç½®å–多ž®‘个å—符。多看看man英文也会有所æé«˜çš„ã€?nbsp;
awk有很多有‘£çš„函数如果感兴‘£å¯ä»¥è‡ªå·±åŽ»æŸ¥æŸ¥çœ‹ï¼Œ
man awk
String Functions å—符串函敎ͼŒä¸‘Ö‡ 个觉得常用的函数
length([s]) Returns the length of the string s, or the
length of $0 if s is not supplied.
length ä½ å¯ä»¥å¾—到嗽W¦ä¸²çš„长度,˜q™ä¸ªæ˜¯æ¯”较常用的一个函æ•?nbsp;
split(s, a [, r]) Splits the string s into the array a on the
regular expression r, and returns the number of
fields. If r is omitted, FS is used instead.
The array a is cleared first. Splitting
behaves identically to field splitting,
described above.
tolower(str) Returns a copy of the string str, with all the
upper-case characters in str translated to
their corresponding lower-case counterparts.
Non-alphabetic characters are left unchanged.
toupper(str) Returns a copy of the string str, with all the
lower-case characters in str translated to
their corresponding upper-case counterparts.
&
nbsp; Non-alphabetic characters are left unchanged.
Time Functions æ—‰™—´å‡½æ•°åQŒæˆ‘们最最常用到的是时间戳转æ¢å‡½æ•°
strftime([format [, timestamp]])
Formats timestamp according to the specification in format.
The timestamp should be of the same form as returned by sys-
time(). If timestamp is missing, the current time of day is
used. If format is missing, a default format equivalent to
the output of date(1) is used. See the specification for the
strftime() function in ANSI C for the format conversions that
are guaranteed to be available. A public-domain version of
strftime(3) and a man page for it come with gawk; if that
version was used to build gawk, then all of the conversions
described in that man page are available to gawk.
˜q™é‡Œä¸¾ä¾‹è¯´æ˜Žæ—‰™—´æˆ›_‡½æ•°æ˜¯å¦‚何使用çš?/p>
[root@ent root]# date +%s | awk '{print strftime("%F %T",$0)}'
2008-02-19 15:59:19
我们先ä‹É用date命ä×oåšä¸€ä¸ªæ—¶é—´æˆ³åQŒç„¶åŽå†æŠŠä»–转æ¢ä¸ºæ—¶é—?nbsp;
˜q˜æœ‰ä¸€äº›æˆ‘们现在å¯èƒ½ä¸¾l常用到的函敎ͼŒè¯¦ç»†å†…容man awk 自己å¯ä»¥çœ‹ä¸€ä¸‹ã€?br />
Bit Manipulations Functions 二进制函�br />
Internationalization Functions å›½é™…æ ‡å‡†åŒ–å‡½æ•?br />
USER-DEFINED FUNCTIONS 用户也å¯ä»¥è‡ªå·±å®šä¹‰è‡ªå·Þqš„函数åQŒæ„Ÿå…´è¶£è‡ªå·±å¯ä»¥å†æ·±å…¥ç ”½I¶ä¸€ä¸‹ã€?br />
For example:
function f(p, q, a, b) # a and b are local
{
...
}
/abc/ { ... ; f(1, 2) ; ... }
DYNAMICALLY LOADING NEW FUNCTIONS 动æ€åŠ è½½æ–°å‡½æ•°åQŒè¿™ä¸ªå¯èƒ½å°±æ›´é«˜¾U§ä¸€äº›äº†åQ?br />
================================================================================
awk高çñ”½‹?br />
ä¸ç®¡å¦ä¹ ä»ÖM½•è¯è¨€åQŒæˆ‘们å¦åˆ°çš„都是工具åQŒå·¥å…ïLŸ¥é“çš„‘Šå¤šåQŒæˆ‘们åšèµ·å·¥ä½œæ¥ž®Þp¶Šæ–¹ä¾¿åQŒä½†æ˜¯å·¥å…·åœ¨ä½ 的手里òq¶ä¸ä¸€å®šèƒ½é€ 出好的产å“åQŒç¼–辑脚本和¾~–程åºä¹Ÿæ˜¯ä¸€æ ïLš„é‡è¦çš„æ˜¯½Ž—法åQŒåˆ«äºÞZ¸çŸ¥é“怎么处ç†çš„é—®é¢˜ä½ è¦çŸ¥é“如何处ç†ã€‚è¿™æ‰èƒ½è¯æ˜Žä½ 比别äh更高åQŒå·¥å…·åªè¦ä½ 慢慢¾lƒä¹ 都会使用ã€?br />
下颾l™å¤§å®¶ä¸€ä¸ªæˆ‘è®¤äØ“æ˜¯æ¯”è¾ƒé«˜¾U§çš„问题了,感兴‘£çš„å¯ä»¥è‡ªå·±å†æƒ³æƒÏx›´å¥½çš„解决办法ã€?/p>
问题是这æ ïLš„æˆ‘们有一个从ldap里导出的文äšgåQŒå®ƒéƒ½æ˜¯ä¸€è¡Œä¸€ä¸ªå—ŒD‰|¥è¯´æ˜Žçš„,æ¯ä¸ªç”¨æˆ·çš„æ•°æ®æ˜¯å·²ç©ºè¡Œåˆ†å‰²çš„。我们必™åÀLŠŠå¯¹åº”çš„uid å’ŒuserPassword扑ևºæ¥è€Œä¸”是对应的ã€?br />
例ååQšexample4.txt
dn: uid=cailiying,domain=ccc.com.cn,o=mail.ccc.com.cn
uid: cailiying
userPassword:: e21kNX0zREl4VEIwODBJdXZkTnU3WFFtS3lRPT0=
letters: 300
quota: 100
dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn
dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
dn: uid=caixiaoning,domain=ccc.com.cn,o=mail.ccc.com.cn
userPassword:: e21kNX1kejFXU0doZWprR2RNYnV5ajJJRWl3PT0=
letters: 300
quota: 100
uid: chenzheng
domain: cqc.com.cn
处熘q™ä¸ªæ–‡æœ¬æˆ‘们需è¦è€ƒè™‘的问题是åQ?br />
1 uid å’ŒuserPassword òq¶ä¸æ˜¯æ¯ä¸€ä¸ªæ®µè½é‡Œéƒ½æœ‰
2 在æ¯ä¸€ŒDµé‡Œé¢uidå’ŒuserPassword 先厙åºåºæ˜¯éšæœºçš„
3 有的ŒDµè½é‡Œå¯èƒ½åªæœ‰uid æˆ–è€…åªæœ‰userPassword
从文本上分æžå¯ä»¥çœ‹å‡ºå¿…须使用的间隔符åøP¼Œä¸€ä¸ªæ˜¯½Iø™¡ŒåQŒä¸€ä¸ªæ˜¯å†’å·ã€?br /> 冒巿ˆ‘们awk -F:ž®±å¯ä»¥äº†åQŒä¸˜q‡ç©ºè¡Œæˆ‘们ä¸å¥½åˆ¤æ–现在想到length()˜q™ä¸ªå‡½æ•°åQŒåœ¨unixé‡Œç©ºè¡Œæœ€å¤šåªæœ‰ä¸€ä¸ª\nå—符åQŒå¦‚果一行嗽W¦æ•°ž®äºŽ2我们判æ–为空行,好现在间隔符å·é—®é¢˜è§£å†»I¼Œ½Iø™¡Œåªèƒ½é€šè¿‡å¾ªçޝæ¥å®žçް坹½Iø™¡Œçš„判æ–ã€?nbsp;
现在¼„°åˆ°çš„å¦å¤–一个问题是我们的æŸä¸ªæ®µé‡Œçš„ä¿¡æ¯æ˜¯ä¸å®Œå…¨çš„,我们ž®Þp¦æ”‘Ö¼ƒ˜q™æ®µ˜q™å„¿å¦‚何æ¥åšåQŒå°±æ˜¯è¦åšä¸¤ä¸ªæ ‡è®°å˜é‡u å’?p å†åšä¸€ä¸ªåó@环如果u å’?nbsp; p åŒäº‹æ»¡èƒö我们æ‰è¾“出结果下é¢çš„awk脚本ž®±æ˜¯é€šè¿‡˜q™ä¸ªæ€è€ƒæ¥è§£å†³ldif文本的处ç†çš„åQ?/p>
# æ¤è„šæœ¬çš„ç›®çš„æ˜¯æ–¹ä¾¿æˆ‘ä»¬ä»¥åŽå¯¼ldap的其他邮件的数æ®åQ?br />
# 我们之å‰ä½¿ç”¨slapdcat -l 导出所有信æ¯ï¼Œç„¶åŽæˆ‘们需è¦?br />
# æ•´ç†å‡ºuid password , ˜q™é‡Œçš„设¾|®éƒ½æ˜¯é»˜è®¤ä»¥":" é—´éš”çš?br />
# 例slapcat -l user.ldif 如果惛_¾—åˆîC¸€ä»½uid å’ŒuserPassword 对应的文ä»Óž¼Œ
# 修改username = "dn"; password = "userpassword"; awk -f ldap2txt.awk user.ldif | grep uid | more å¯ä»¥æŸ¥çœ‹¾l“æžœ (有å¯èƒ½æ˜¯å¤šåŸŸçš„é‚®ä»?
# 如果惛_¾—到domain 所对应的密ç ,修改username = "dn"; password = "userpassword"; ˜q行 awk -f ldap2txt.awk user.ldif |grep domain | more
#!/bin/awk -f
# File name: ldap2txt.awk
BEGIN {
FS = ":";
username = "uid";
password = "userPassword";
}
{
if(length($0) == 0 )
{
if (name != "u" && pword != "p")
{
printf ("%s:%s\n", name,pword);
name = "u";
pword = "p";
}
}
else
{
if ($1 == username)
{
name = "u";
name = $0;
}
else if($1 == password)
{
pword = "p";
pword = $0;
}
}
}
END {
}
实际上对于å¦ä¹ è¯a€é¦–先是熟悉一些常用的函数åQŒç„¶åŽå°±æ˜¯è¯•ç€åŽ»è§£å†›_ˆ«äºø™§£å†Œ™¿‡çš„问题,然åŽè‡ªå·±å†æ€è€ƒä¸€ä¸‹æ˜¯ä¸æ˜¯æœ‰æ›´å¥½ï¼Œé€Ÿåº¦æ›´å¿«çš„解军_Šžæ³•ï¼Œå®žé™…ä¸Šå¤§éƒ¨åˆ†çš„ç¨‹åºå‘˜éƒ½æ˜¯åœ¨é‡å¤çš„使用ç€åˆ«äh好的解决办法åQŒæŠŠåˆ«äh的方法è{å˜äؓ自己的方法,ž®±æ˜¯å夾lƒä¹ 解决ä¸åŒçš„问题,æ€è€ƒæ›´å¥½çš„æ–ÒŽ³•åQ?/p>
æ–‡ç« å‡ºå¤„åQšhttp://www.diybl.com/course/3_program/shell/shelljs/200862/119688_4.html