锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产欧美一级,亚洲高清不卡在线观看,国产精品久久久久7777婷婷http://m.shnenglu.com/09212744/archive/2010/12/25/137463.html鍚寸Е錛圫aylor錛?/dc:creator>鍚寸Е錛圫aylor錛?/author>Sat, 25 Dec 2010 12:29:00 GMThttp://m.shnenglu.com/09212744/archive/2010/12/25/137463.htmlhttp://m.shnenglu.com/09212744/comments/137463.htmlhttp://m.shnenglu.com/09212744/archive/2010/12/25/137463.html#Feedback0http://m.shnenglu.com/09212744/comments/commentRss/137463.htmlhttp://m.shnenglu.com/09212744/services/trackbacks/137463.html鍦╨inux涓嬮潰宸ヤ綔錛屾湁浜涘懡浠よ兘澶熷ぇ澶ф彁楂樻晥鐜囥傛湰鏂囧氨鍚戝ぇ瀹朵粙緇峟ind銆乬rep鍛戒護錛屼粬鍝ヤ咯鍙互綆楁槸蹇呬細鐨刲inux鍛戒護錛屾垜鍑犱箮姣忓ぉ閮借鐢ㄥ埌浠栦滑銆傛湰鏂囩粨鏋勫涓嬶細

  • find鍛戒護
    • find鍛戒護鐨勪竴鑸艦寮?
    • find鍛戒護鐨勫父鐢ㄩ夐」鍙婂疄渚?
    • find涓巟args
  • grep鍛戒護
    • grep鍛戒護鐨勪竴鑸艦寮?
    • grep姝e垯琛ㄨ揪寮忓厓瀛楃闆?鍩烘湰闆?
    • grep鍛戒護鐨勫父鐢ㄩ夐」鍙婂疄渚?

1銆乫ind鍛戒護

find鍛戒護鏄竴涓棤澶勪笉鍦ㄥ懡浠わ紝鏄痩inux涓渶鏈夌敤鐨勫懡浠や箣涓銆俧ind鍛戒護鐢ㄤ簬錛氬湪涓涓洰褰曪紙鍙婂瓙鐩綍錛変腑鎼滅儲鏂囦歡錛屼綘鍙互鎸囧畾涓浜涘尮閰嶆潯浠訛紝濡傛寜鏂囦歡鍚嶃佹枃浠剁被鍨嬨佺敤鎴風敋鑷蟲槸鏃墮棿鎴蟲煡鎵炬枃浠躲備笅闈㈠氨閫氳繃瀹炰緥鏉ヤ綋楠屼笅find鍛戒護鐨勫己澶с?/p>

1.1銆乫ind鍛戒護鐨勪竴鑸艦寮?/h2>

man鏂囨。涓粰鍑虹殑find鍛戒護鐨勪竴鑸艦寮忎負錛?/p>

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

鍏跺疄[-H] [-L] [-P] [-D debugopts] [-Olevel]榪欏嚑涓夐」騫朵笉甯哥敤錛堣嚦灝戝湪鎴戠殑鏃ュ父宸ヤ綔涓紝娌℃湁鐢ㄥ埌榪囷級錛屼笂闈㈢殑find鍛戒護鐨勫父鐢ㄥ艦寮忓彲浠ョ畝鍖栦負錛?/p>

find [path...] [expression]

  • path錛歠ind鍛戒護鎵鏌ユ壘鐨勭洰褰曡礬寰勩備緥濡傜敤.鏉ヨ〃紺哄綋鍓嶇洰褰曪紝鐢?鏉ヨ〃紺虹郴緇熸牴鐩綍
  • expression錛歟xpression鍙互鍒嗕負鈥斺斺?options [-print -exec -ok ...]鈥?
  • -options錛屾寚瀹歠ind鍛戒護鐨勫父鐢ㄩ夐」錛屼笅鑺傝緇嗕粙緇?
  • -print錛宖ind鍛戒護灝嗗尮閰嶇殑鏂囦歡杈撳嚭鍒版爣鍑嗚緭鍑?
  • -exec錛宖ind鍛戒護瀵瑰尮閰嶇殑鏂囦歡鎵ц璇ュ弬鏁版墍緇欏嚭鐨剆hell鍛戒護銆傜浉搴斿懡浠ょ殑褰㈠紡涓?command' {  } \;錛屾敞鎰弡   }鍜孿錛涗箣闂寸殑絀烘牸
    find ./ -size 0 -exec rm {} \; 鍒犻櫎鏂囦歡澶у皬涓洪浂鐨勬枃浠?錛堣繕鍙互浠ヨ繖鏍峰仛錛歳m -i `find ./ -size 0`  鎴?find ./ -size 0 | xargs rm -f &錛?
    涓轟簡鐢╨s -l鍛戒護鍒楀嚭鎵鍖歸厤鍒扮殑鏂囦歡錛屽彲浠ユ妸ls -l鍛戒護鏀懼湪find鍛戒護鐨?exec閫夐」涓細find . -type f -exec ls -l {  } \;
    鍦?logs鐩綍涓煡鎵炬洿鏀規椂闂村湪5鏃ヤ互鍓嶇殑鏂囦歡騫跺垹闄ゅ畠浠細find /logs -type f -mtime +5 -exec rm {  } \;
  • -ok錛屽拰-exec鐨勪綔鐢ㄧ浉鍚岋紝鍙笉榪囦互涓縐嶆洿涓哄畨鍏ㄧ殑妯″紡鏉ユ墽琛岃鍙傛暟鎵緇欏嚭鐨剆hell鍛戒護錛屽湪鎵ц姣忎竴涓懡浠や箣鍓嶏紝閮戒細緇欏嚭鎻愮ず錛岃鐢ㄦ埛鏉ョ‘瀹氭槸鍚︽墽琛屻?
    find . -name "*.conf"  -mtime +5 -ok rm {  } \; 鍦ㄥ綋鍓嶇洰褰曚腑鏌ユ壘鎵鏈夋枃浠跺悕浠?LOG緇撳熬銆佹洿鏀規椂闂村湪5鏃ヤ互涓婄殑鏂囦歡錛屽茍鍒犻櫎瀹冧滑錛屽彧涓嶈繃鍦ㄥ垹闄や箣鍓嶅厛緇欏嚭鎻愮ず

    涔熸湁浜鴻繖鏍鋒葷粨find鍛戒護鐨勭粨鏋勶細

    find start_directory test 
    options
    criteria_to_match
    action_to_perform_on_results

    1.2銆乫ind鍛戒護鐨勫父鐢ㄩ夐」鍙婂疄渚?/h2>
  • -name
    鎸夌収鏂囦歡鍚嶆煡鎵炬枃浠躲?
    find /dir -name filename  鍦?dir鐩綍鍙婂叾瀛愮洰褰曚笅闈㈡煡鎵懼悕瀛椾負filename鐨勬枃浠?
    find . -name "*.c" 鍦ㄥ綋鍓嶇洰褰曞強鍏跺瓙鐩綍錛堢敤鈥?鈥濊〃紺猴級涓煡鎵句換浣曟墿灞曞悕涓衡渃鈥濈殑鏂囦歡
  • -perm
    鎸夌収鏂囦歡鏉冮檺鏉ユ煡鎵炬枃浠躲?
    find . -perm 755 鈥損rint 鍦ㄥ綋鍓嶇洰褰曚笅鏌ユ壘鏂囦歡鏉冮檺浣嶄負755鐨勬枃浠訛紝鍗蟲枃浠跺睘涓誨彲浠ヨ銆佸啓銆佹墽琛岋紝鍏朵粬鐢ㄦ埛鍙互璇匯佹墽琛岀殑鏂囦歡
  • -prune
    浣跨敤榪欎竴閫夐」鍙互浣縡ind鍛戒護涓嶅湪褰撳墠鎸囧畾鐨勭洰褰曚腑鏌ユ壘錛屽鏋滃悓鏃朵嬌鐢?depth閫夐」錛岄偅涔?prune灝嗚find鍛戒護蹇界暐銆?
    find /apps -path "/apps/bin" -prune -o 鈥損rint 鍦?apps鐩綍涓嬫煡鎵炬枃浠訛紝浣嗕笉甯屾湜鍦?apps/bin鐩綍涓嬫煡鎵?
    find /usr/sam -path "/usr/sam/dir1" -prune -o 鈥損rint 鍦?usr/sam鐩綍涓嬫煡鎵句笉鍦╠ir1瀛愮洰褰曚箣鍐呯殑鎵鏈夋枃浠?
  • -user
    鎸夌収鏂囦歡灞炰富鏉ユ煡鎵炬枃浠躲?
    find ~ -user sam 鈥損rint 鍦?HOME鐩綍涓煡鎵炬枃浠跺睘涓諱負sam鐨勬枃浠?
  • -group
    鎸夌収鏂囦歡鎵灞炵殑緇勬潵鏌ユ壘鏂囦歡銆?
    find /apps -group gem 鈥損rint 鍦?apps鐩綍涓嬫煡鎵懼睘浜巊em鐢ㄦ埛緇勭殑鏂囦歡 
  • -mtime -n +n
    鎸夌収鏂囦歡鐨勬洿鏀規椂闂存潵鏌ユ壘鏂囦歡錛?- n琛ㄧず鏂囦歡鏇存敼鏃墮棿璺濈幇鍦╪澶╀互鍐咃紝+ n琛ㄧず鏂囦歡鏇存敼鏃墮棿璺濈幇鍦╪澶╀互鍓嶃?
    find / -mtime -5 鈥損rint 鍦ㄧ郴緇熸牴鐩綍涓嬫煡鎵炬洿鏀規椂闂村湪5鏃ヤ互鍐呯殑鏂囦歡
    find /var/adm -mtime +3 鈥損rint 鍦?var/adm鐩綍涓嬫煡鎵炬洿鏀規椂闂村湪3鏃ヤ互鍓嶇殑鏂囦歡
  • -nogroup
    鏌ユ壘鏃犳湁鏁堟墍灞炵粍鐨勬枃浠訛紝鍗寵鏂囦歡鎵灞炵殑緇勫湪/etc/groups涓笉瀛樺湪銆?
    find / 鈥搉ogroup -print
  • -nouser
    鏌ユ壘鏃犳湁鏁堝睘涓葷殑鏂囦歡錛屽嵆璇ユ枃浠剁殑灞炰富鍦?etc/passwd涓笉瀛樺湪銆?
    find /home -nouser 鈥損rint
  • -newer file1 ! file2
    鏌ユ壘鏇存敼鏃墮棿姣旀枃浠秄ile1鏂頒絾姣旀枃浠秄ile2鏃х殑鏂囦歡銆?
  • -type
    鏌ユ壘鏌愪竴綾誨瀷鐨勬枃浠訛紝璇稿錛?
    b - 鍧楄澶囨枃浠躲?
    d - 鐩綍銆?
    c - 瀛楃璁懼鏂囦歡銆?
    p - 綆¢亾鏂囦歡銆?
    l - 絎﹀彿閾炬帴鏂囦歡銆?
    f - 鏅氭枃浠躲?
    find /etc -type d 鈥損rint 鍦?etc鐩綍涓嬫煡鎵炬墍鏈夌殑鐩綍
    find . ! -type d 鈥損rint 鍦ㄥ綋鍓嶇洰褰曚笅鏌ユ壘闄ょ洰褰曚互澶栫殑鎵鏈夌被鍨嬬殑鏂囦歡
    find /etc -type l 鈥損rint 鍦?etc鐩綍涓嬫煡鎵炬墍鏈夌殑絎﹀彿閾炬帴鏂囦歡
  • -size n錛歔c] 鏌ユ壘鏂囦歡闀垮害涓簄鍧楃殑鏂囦歡錛屽甫鏈塩鏃惰〃紺烘枃浠墮暱搴︿互瀛楄妭璁°?
    find . -size +1000000c 鈥損rint 鍦ㄥ綋鍓嶇洰褰曚笅鏌ユ壘鏂囦歡闀垮害澶т簬1 M瀛楄妭鐨勬枃浠?
    find /home/apache -size 100c 鈥損rint 鍦?home/apache鐩綍涓嬫煡鎵炬枃浠墮暱搴︽伆濂戒負100瀛楄妭鐨勬枃浠?
    find . -size +10 鈥損rint 鍦ㄥ綋鍓嶇洰褰曚笅鏌ユ壘闀垮害瓚呰繃10鍧楃殑鏂囦歡錛堜竴鍧楃瓑浜?12瀛楄妭錛?
  • -depth錛氬湪鏌ユ壘鏂囦歡鏃訛紝棣栧厛鏌ユ壘褰撳墠鐩綍涓殑鏂囦歡錛岀劧鍚庡啀鍦ㄥ叾瀛愮洰褰曚腑鏌ユ壘銆?
    find / -name "CON.FILE" -depth 鈥損rint 瀹冨皢棣栧厛鍖歸厤鎵鏈夌殑鏂囦歡鐒跺悗鍐嶈繘鍏ュ瓙鐩綍涓煡鎵?nbsp;
  • -mount錛氬湪鏌ユ壘鏂囦歡鏃朵笉璺ㄨ秺鏂囦歡緋葷粺mount鐐廣?nbsp;
    find . -name "*.XC" -mount 鈥損rint 浠庡綋鍓嶇洰褰曞紑濮嬫煡鎵句綅浜庢湰鏂囦歡緋葷粺涓枃浠跺悕浠C緇撳熬鐨勬枃浠訛紙涓嶈繘鍏ュ叾浠栨枃浠剁郴緇燂級
  • -follow錛氬鏋渇ind鍛戒護閬囧埌絎﹀彿閾炬帴鏂囦歡錛屽氨璺熻釜鑷抽摼鎺ユ墍鎸囧悜鐨勬枃浠躲?

    1.3銆乫ind涓巟args

    鍦ㄤ嬌鐢╢ind鍛戒護鐨?exec閫夐」澶勭悊鍖歸厤鍒扮殑鏂囦歡鏃訛紝 find鍛戒護灝嗘墍鏈夊尮閰嶅埌鐨勬枃浠朵竴璧蜂紶閫掔粰exec鎵ц銆備絾鏈変簺緋葷粺瀵硅兘澶熶紶閫掔粰exec鐨勫懡浠ら暱搴︽湁闄愬埗錛岃繖鏍峰湪find鍛戒護榪愯鍑犲垎閽熶箣鍚庯紝灝變細鍑虹幇婧㈠嚭閿欒銆傞敊璇俊鎭氬父鏄滃弬鏁板垪澶暱鈥濇垨鈥滃弬鏁板垪婧㈠嚭鈥濄傝繖灝辨槸xargs鍛戒護鐨勭敤澶勬墍鍦紝鐗瑰埆鏄笌find鍛戒護涓璧蜂嬌鐢ㄣ?/p>

    find鍛戒護鎶婂尮閰嶅埌鐨勬枃浠朵紶閫掔粰xargs鍛戒護錛岃寈args鍛戒護姣忔鍙幏鍙栦竴閮ㄥ垎鏂囦歡鑰屼笉鏄叏閮紝涓嶅儚-exec閫夐」閭f牱銆傝繖鏍峰畠鍙互鍏堝鐞嗘渶鍏堣幏鍙栫殑涓閮ㄥ垎鏂囦歡錛岀劧鍚庢槸涓嬩竴鎵癸紝騫跺姝ょ戶緇笅鍘匯?/p>

    鍦ㄦ湁浜涚郴緇熶腑錛屼嬌鐢?exec閫夐」浼氫負澶勭悊姣忎竴涓尮閰嶅埌鐨勬枃浠惰屽彂璧蜂竴涓浉搴旂殑榪涚▼錛屽茍闈炲皢鍖歸厤鍒扮殑鏂囦歡鍏ㄩ儴浣滀負鍙傛暟涓嬈℃墽琛岋紱榪欐牱鍦ㄦ湁浜涙儏鍐典笅灝變細鍑虹幇榪涚▼榪囧錛岀郴緇熸ц兘涓嬮檷鐨勯棶棰橈紝鍥犺屾晥鐜囦笉楂橈紱

    鑰屼嬌鐢▁args鍛戒護鍒欏彧鏈変竴涓繘紼嬨傚彟澶栵紝鍦ㄤ嬌鐢▁args鍛戒護鏃訛紝絀剁珶鏄竴嬈¤幏鍙栨墍鏈夌殑鍙傛暟錛岃繕鏄垎鎵瑰彇寰楀弬鏁幫紝浠ュ強姣忎竴嬈¤幏鍙栧弬鏁扮殑鏁扮洰閮戒細鏍規嵁璇ュ懡浠ょ殑閫夐」鍙婄郴緇熷唴鏍鎬腑鐩稿簲鐨勫彲璋冨弬鏁版潵紜畾銆?/font>

    鏉ョ湅鐪媥args鍛戒護鏄浣曞悓find鍛戒護涓璧蜂嬌鐢ㄧ殑錛屽茍緇欏嚭涓浜涗緥瀛愩?/p>

    find . -type f -print | xargs file 鏌ユ壘緋葷粺涓殑姣忎竴涓櫘閫氭枃浠訛紝鐒跺悗浣跨敤xargs鍛戒護鏉ユ祴璇曞畠浠垎鍒睘浜庡摢綾繪枃浠?/p>

    find / -name "core" -print | xargs echo "" >/tmp/core.log 鍦ㄦ暣涓郴緇熶腑鏌ユ壘鍐呭瓨淇℃伅杞偍鏂囦歡(core dump) 錛岀劧鍚庢妸緇撴灉淇濆瓨鍒?tmp/core.log 鏂囦歡涓細

    find . -type f -print | xargs grep "hostname" 鐢╣rep鍛戒護鍦ㄦ墍鏈夌殑鏅氭枃浠朵腑鎼滅儲hostname榪欎釜璇?/p>

    find ./ -mtime +3 -print|xargs rm -f 鈥搑 鍒犻櫎3澶╀互鍓嶇殑鎵鏈変笢瑗?錛坒ind . -ctime +3 -exec rm -rf {} \;錛?/p>

    find ./ -size 0 | xargs rm -f & 鍒犻櫎鏂囦歡澶у皬涓洪浂鐨勬枃浠?/p>

    find鍛戒護閰嶅悎浣跨敤exec鍜寈args鍙互浣跨敤鎴峰鎵鍖歸厤鍒扮殑鏂囦歡鎵ц鍑犱箮鎵鏈夌殑鍛戒護銆?/p>

    2銆乬rep鍛戒護

    grep (global search regular expression(RE) and print out the line,鍏ㄩ潰鎼滅儲姝e垯琛ㄨ揪寮忓茍鎶婅鎵撳嵃鍑烘潵)鏄竴縐嶅己澶х殑鏂囨湰鎼滅儲宸ュ叿錛屽畠鑳戒嬌鐢ㄦ鍒欒〃杈懼紡鎼滅儲鏂囨湰錛屽茍鎶婂尮閰嶇殑琛屾墦鍗板嚭鏉ャ?/p>

    2.1銆乬rep鍛戒護鐨勪竴鑸夐」鍙婂疄渚?/h2>

    grep [OPTIONS] PATTERN [FILE...]
    grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    grep鍛戒護鐢ㄤ簬鎼滅儲鐢盤attern鍙傛暟鎸囧畾鐨勬ā寮忥紝騫跺皢姣忎釜鍖歸厤鐨勮鍐欏叆鏍囧噯杈撳嚭涓傝繖浜涙ā寮忔槸鍏鋒湁闄愬畾鐨勬鍒欒〃杈懼紡錛屽畠浠嬌鐢╡d鎴杄grep鍛戒護鏍峰紡銆傚鏋滃湪File鍙傛暟涓寚瀹氫簡澶氫釜鍚嶇О錛実rep鍛戒護灝嗘樉紺哄寘鍚尮閰嶈鐨勬枃浠剁殑鍚嶇О銆傚 shell 鏈夌壒孌婂惈涔夌殑瀛楃 ($, *, [, |, ^, (, ), \ ) 鍑虹幇鍦?Pattern鍙傛暟涓椂蹇呴』甯﹀弻寮曞彿銆傚鏋?Pattern鍙傛暟涓嶆槸綆鍗曞瓧絎︿覆錛岄氬父蹇呴』鐢ㄥ崟寮曞彿灝嗘暣涓ā寮忔嫭璧鋒潵銆傚湪璇稿 [a-z], 涔嬬被鐨勮〃杈懼紡涓紝-錛堝噺鍙鳳級cml 鍙牴鎹綋鍓嶆鍦ㄦ暣鐞嗙殑搴忓垪鏉ユ寚瀹氫竴涓寖鍥淬傛暣鐞嗗簭鍒楀彲浠ュ畾涔夌瓑浠風殑綾諱互渚涘湪瀛楃鑼冨洿涓嬌鐢ㄣ傚鏋滄湭鎸囧畾浠諱綍鏂囦歡錛実rep浼氬亣瀹氫負鏍囧噯杈撳叆銆?/p>

    2.2銆乬rep姝e垯琛ㄨ揪寮忓厓瀛楃闆?鍩烘湰闆?

    ^  閿氬畾琛岀殑寮濮?濡傦細'^grep'鍖歸厤鎵鏈変互grep寮澶寸殑琛屻?/p>

    $  閿氬畾琛岀殑緇撴潫 濡傦細'grep$'鍖歸厤鎵鏈変互grep緇撳熬鐨勮銆?/p>

    .   鍖歸厤涓涓潪鎹㈣絎︾殑瀛楃 濡傦細'gr.p'鍖歸厤gr鍚庢帴涓涓換鎰忓瓧絎︼紝鐒跺悗鏄痯銆?/p>

    *  鍖歸厤闆朵釜鎴栧涓厛鍓嶅瓧絎?濡傦細'*grep'鍖歸厤鎵鏈変竴涓垨澶氫釜絀烘牸鍚庣揣璺焔rep鐨勮銆?font size="3"> .*涓璧風敤浠h〃浠繪剰瀛楃銆?/p>

    [] 鍖歸厤涓涓寚瀹氳寖鍥村唴鐨勫瓧絎︼紝濡?[Gg]rep'鍖歸厤Grep鍜実rep銆?/p>

    [^]  鍖歸厤涓涓笉鍦ㄦ寚瀹氳寖鍥村唴鐨勫瓧絎︼紝濡傦細'[^A-FH-Z]rep'鍖歸厤涓嶅寘鍚獳-R鍜孴-Z鐨勪竴涓瓧姣嶅紑澶達紝绱ц窡rep鐨勮銆?/p>

    \(..\)  鏍囪鍖歸厤瀛楃錛屽錛?\(love\)'錛宭ove琚爣璁頒負1銆?/p>

    \<  閿氬畾鍗曡瘝鐨勫紑濮嬶紝濡傦細'\<grep'鍖歸厤鍖呭惈浠rep寮澶寸殑鍗曡瘝鐨勮銆?/p>

    \>  閿氬畾鍗曡瘝鐨勭粨鏉燂紝濡?grep\>'鍖歸厤鍖呭惈浠rep緇撳熬鐨勫崟璇嶇殑琛屻?/p>

    x\{m\} 榪炵畫閲嶅瀛楃x錛宮嬈★紝濡傦細'o\{5\}'鍖歸厤鍖呭惈榪炵畫5涓猳鐨勮銆?/p>

    x\{m,\} 榪炵畫閲嶅瀛楃x,鑷沖皯m嬈★紝濡傦細'o\{5,\}'鍖歸厤鑷沖皯榪炵畫鏈?涓猳鐨勮銆?/p>

    x\{m,n\} 榪炵畫閲嶅瀛楃x錛岃嚦灝憁嬈★紝涓嶅浜巒嬈★紝濡傦細'o\{5,10\}'鍖歸厤榪炵畫5--10涓猳鐨勮銆?/p>

    \w  鍖歸厤涓涓枃瀛楀拰鏁板瓧瀛楃錛屼篃灝辨槸[A-Za-z0-9]錛屽錛?G\w*p'鍖歸厤浠鍚庤窡闆朵釜鎴栧涓枃瀛楁垨鏁板瓧瀛楃錛岀劧鍚庢槸p銆?/p>

    \W  w鐨勫弽緗艦寮忥紝鍖歸厤涓涓潪鍗曡瘝瀛楃錛屽鐐瑰彿鍙ュ彿絳夈俓W*鍒欏彲鍖歸厤澶氫釜銆?/p>

    \b  鍗曡瘝閿佸畾絎︼紝濡? '\bgrep\b'鍙尮閰峠rep錛屽嵆鍙兘鏄痝rep榪欎釜鍗曡瘝錛屼袱杈瑰潎涓虹┖鏍箋?/p>

    2.3銆乬rep鍛戒護鐨勫父鐢ㄩ夐」鍙婂疄渚?/h2>

    -?

    鍚屾椂鏄劇ず鍖歸厤琛屼笂涓嬬殑錛熻錛屽錛歡rep -2 pattern filename鍚屾椂鏄劇ず鍖歸厤琛岀殑涓婁笅2琛屻?/p>

    -b錛?-byte-offset

    鎵撳嵃鍖歸厤琛屽墠闈㈡墦鍗拌琛屾墍鍦ㄧ殑鍧楀彿鐮併?/p>

    -c,--count

    鍙墦鍗板尮閰嶇殑琛屾暟錛屼笉鏄劇ず鍖歸厤鐨勫唴瀹廣?/p>

    -f File錛?-file=File

    浠庢枃浠朵腑鎻愬彇妯℃澘銆傜┖鏂囦歡涓寘鍚?涓ā鏉匡紝鎵浠ヤ粈涔堥兘涓嶅尮閰嶃?/p>

    -h錛?-no-filename

    褰撴悳绱㈠涓枃浠舵椂錛屼笉鏄劇ず鍖歸厤鏂囦歡鍚嶅墠緙銆?/p>

    -i錛?-ignore-case

    蹇界暐澶у皬鍐欏樊鍒?/p>

    -q錛?-quiet

    鍙栨秷鏄劇ず錛屽彧榪斿洖閫鍑虹姸鎬併?鍒欒〃紺烘壘鍒頒簡鍖歸厤鐨勮銆?/p>

    -l錛?-files-with-matches

    鎵撳嵃鍖歸厤妯℃澘鐨勬枃浠舵竻鍗曘?/p>

    -L錛?-files-without-match

    鎵撳嵃涓嶅尮閰嶆ā鏉跨殑鏂囦歡娓呭崟銆?/p>

    -n錛?-line-number

    鍦ㄥ尮閰嶇殑琛屽墠闈㈡墦鍗拌鍙楓?/p>

    -s錛?-silent

    涓嶆樉紺哄叧浜庝笉瀛樺湪鎴栬呮棤娉曡鍙栨枃浠剁殑閿欒淇℃伅銆?/p>

    -v錛?-revert-match

    鍙嶆绱紝鍙樉紺轟笉鍖歸厤鐨勮銆?/p>

    -w錛?-word-regexp

    濡傛灉琚玕<鍜孿>寮曠敤錛屽氨鎶婅〃杈懼紡鍋氫負涓涓崟璇嶆悳绱€?/p>

    -V錛?-version

    鏄劇ず杞歡鐗堟湰淇℃伅銆?/p>

    =====

    ls -l | grep '^a' 閫氳繃綆¢亾榪囨護ls -l杈撳嚭鐨勫唴瀹癸紝鍙樉紺轟互a寮澶寸殑琛屻?/p>

    grep 'test' d* 鏄劇ず鎵鏈変互d寮澶寸殑鏂囦歡涓寘鍚玹est鐨勮銆?/p>

    grep 'test' aa bb cc 鏄劇ず鍦╝a錛宐b錛宑c鏂囦歡涓尮閰峵est鐨勮銆?/p>

    grep '[a-z]' aa 鏄劇ず鎵鏈夊寘鍚瘡涓瓧絎︿覆鑷沖皯鏈?涓繛緇皬鍐欏瓧絎︾殑瀛楃涓茬殑琛屻?/p>

    grep 'w(es)t.*' aa 濡傛灉west琚尮閰嶏紝鍒檈s灝辮瀛樺偍鍒板唴瀛樹腑錛屽茍鏍囪涓?錛岀劧鍚庢悳绱換鎰忎釜瀛楃(.*)錛岃繖浜涘瓧絎﹀悗闈㈢揣璺熺潃鍙﹀涓涓猠s()錛屾壘鍒板氨鏄劇ず璇ヨ銆傚鏋滅敤egrep鎴杇rep -E錛屽氨涓嶇敤""鍙瘋繘琛岃漿涔夛紝鐩存帴鍐欐垚'w(es)t.*'灝卞彲浠ヤ簡銆?/p>

    grep -i pattern files 錛氫笉鍖哄垎澶у皬鍐欏湴鎼滅儲銆傞粯璁ゆ儏鍐靛尯鍒嗗ぇ灝忓啓

    grep -l pattern files 錛氬彧鍒楀嚭鍖歸厤鐨勬枃浠跺悕錛?/p>

    grep -L pattern files 錛氬垪鍑轟笉鍖歸厤鐨勬枃浠跺悕錛?/p>

    grep -w pattern files 錛氬彧鍖歸厤鏁翠釜鍗曡瘝錛岃屼笉鏄瓧絎︿覆鐨勪竴閮ㄥ垎(濡傚尮閰嶁榤agic鈥欙紝鑰屼笉鏄榤agical鈥?錛?/p>

    grep -C number pattern files 錛氬尮閰嶇殑涓婁笅鏂囧垎鍒樉紺篬number]琛岋紝

    grep pattern1 | pattern2 files 錛氭樉紺哄尮閰?pattern1 鎴?pattern2 鐨勮錛?/p>

    grep pattern1 files | grep pattern2 錛氭樉紺烘棦鍖歸厤 pattern1 鍙堝尮閰?pattern2 鐨勮銆?/p>

     

    鍙傝冩枃鐚細

    鈥斺斿熸鎰熻阿鍦ㄥ疄涔犲叕鍙稿悓浜嬩滑緇欎笌鐨勫府鍔╋紝

    鐗瑰埆鏄疛ay銆丣eff銆?/p>



  • ]]>C++ Internals: STL涔婱aphttp://m.shnenglu.com/09212744/archive/2010/06/19/118235.html鍚寸Е錛圫aylor錛?/dc:creator>鍚寸Е錛圫aylor錛?/author>Sat, 19 Jun 2010 04:25:00 GMThttp://m.shnenglu.com/09212744/archive/2010/06/19/118235.htmlhttp://m.shnenglu.com/09212744/comments/118235.htmlhttp://m.shnenglu.com/09212744/archive/2010/06/19/118235.html#Feedback6http://m.shnenglu.com/09212744/comments/commentRss/118235.htmlhttp://m.shnenglu.com/09212744/services/trackbacks/118235.html姒傝堪

    Map鏄爣鍑?strong>鍏寵仈寮忓鍣?/strong>錛?em>associative container錛変箣涓錛屼竴涓猰ap鏄竴涓敭鍊煎搴忓垪錛屽嵆錛坘ey ,value錛夊銆傚畠鎻愪緵鍩轟簬key鐨?strong>蹇?/strong>媯绱㈣兘鍔涳紝鍦ㄤ竴涓猰ap涓璳ey鍊兼槸鍞竴鐨勩俶ap鎻愪緵鍙屽悜榪唬鍣紝鍗蟲湁浠庡墠寰鍚庣殑錛坕terator錛夛紝涔熸湁浠庡悗寰鍓嶇殑錛坮everse_iterator錛夈?/p>

    map瑕佹眰鑳藉key榪涜<鎿嶄綔錛屼笖淇濇寔鎸塳ey鍊奸掑鏈夊簭錛屽洜姝ap涓婄殑榪唬鍣ㄤ篃鏄掑鏈夊簭鐨勩傚鏋滃浜庡厓绱犲茍涓嶉渶瑕佷繚鎸佹湁搴忥紝鍙互浣跨敤hash_map銆?/p>

    map涓璳ey鍊兼槸鍞竴鐨勶紝濡傛灉椹尮涓凡瀛樺湪涓涓敭鍊煎(鏄電О,瀵嗙爜):("skynet",407574364)錛岃屾垜浠繕鎯蟲彃鍏ヤ竴涓敭鍊煎("skynet",472687789)鍒欎細鎶ラ敊錛?span style="color: #ff0000;">涓嶆槸鎶ラ敊錛屽噯紜殑璇存槸錛岃繑鍥炴彃鍏ヤ笉鎴愬姛錛?/span>錛夈傝屾垜浠張鐨勭‘鎯寵繖鏍峰仛錛屽嵆涓涓敭瀵瑰簲澶氫釜鍊鹼紝騫歌繍鐨勬槸multimap鍙槸瀹炵幇榪欎釜鍔熻兘銆?/p>

    涓嬮潰鎴戜滑鐢ㄥ疄渚嬫潵娣卞叆浠嬬粛map銆?em>multimap錛屼富瑕佸唴瀹瑰涓嬶細

    • 1銆佷緥瀛愬紩鍏?
    • 2銆乵ap涓殑綾誨瀷瀹氫箟
    • 3銆乵ap涓殑榪唬鍣ㄥ拰閿煎
    • 4銆乵ap涓殑鏋勯犲嚱鏁頒笌鏋愭瀯鍑芥暟
    • 5銆乵ap涓殑鎿嶄綔鏂規硶
    • 6銆佸啀璁甿ap鐨勬彃鍏ユ搷浣?
    • 7銆乕]涓嶄粎鎻掑叆
    • 8銆乵ultimap
    • 9銆佹葷粨

    1銆佷緥瀛愬紩鍏?/strong>

    鏈変竴涓湇鍔″櫒manager緇存姢鐫鎺ュ叆鏈嶅姟鍣ㄧ殑client淇℃伅錛屽寘鎷琧linetId銆乻canRate銆乻ocketAddr絳夌瓑銆傛垜浠畾涔変竴涓粨鏋勪綋淇濆瓨scanRate銆乻ocketAddr淇℃伅銆傚涓嬶細

    typedef    int    clientId;
    typedef struct{
    int scanRate;
    string socketAddr;
    }clientInfo;

    鎴戜滑鐢╩ap淇濆瓨榪欎簺淇℃伅錛歝lientId涓洪敭key錛宑lientInfo涓哄箋傝繖鏍鋒垜浠彲浠ラ氳繃clientId蹇熸绱㈠埌client鐨勭浉鍏充俊鎭紝鎴戜滑鍙互榪欐牱瀹氫箟錛?/p>

    map<clientId,clientInfo> clientMap;

    榪欐牱鎴戜滑瀹氫箟浜嗕竴涓猚lientMap錛屽鏋滄垜浠瀹氫箟澶氫釜榪欐牱鐨刴ap錛岄渶瑕佸嬈″啓map<clientId,clientInfo> 鍙橀噺鍚嶃備負浜嗛伩鍏嶈繖鏍鋒儏鍐碉紝鎴戜滑閫氬父涓簃ap<clientId,clientInfo>瀹氫箟涓埆鍚嶏紝濡傦細

    typedef map<clientId,clientInfo> clientEdp;
    clientEdp clientMap;

    涔嬪悗鎴戜滑灝卞彲浠ュ儚瀹氫箟clientMap涓鏍峰畾涔塵ap<clientId,clientInfo>瀵硅薄錛岃繖鏍風殑濂藉榪樻湁錛氬鏋滄垜浠渶瑕佷慨鏀筸ap鐨勫畾涔夛紝鍙渶瑕佸湪涓澶勪慨鏀瑰嵆鍙紝閬垮厤淇敼涓嶅交搴曢犳垚鐨勪笉涓鑷寸幇璞°?/p>

    鎴戜滑榪欏氨瀹屾垚浜嗛渶瑕佺殑map鐨勫畾涔夛紝濡傛灉涓嶅畾涔夋垨娌℃湁鍦ㄥ畠涓婇潰鐨勬搷浣滅殑璇濓紝灝卞儚瀹氫箟綾昏屾病鏈夋柟娉曚竴鏍鳳紝鎰忎箟涓嶅ぇ鎴栨鏃犳剰涔夈傚垢榪愮殑鏄紝STL鎻愪緵浜嗚繖浜涘父鐢ㄦ搷浣滐細鎺掑簭錛堟敞錛歮ap鏄笉鑳戒篃涓嶈鎺掑簭鐨勶紝鍥犱負map鏈韓宸茬粡鎺掑ソ搴忎簡錛夈佹墦鍗般佹彁鍙栧瓙閮ㄥ垎銆佺Щ闄ゅ厓绱犮佹坊鍔犲厓绱犮佹煡鎵懼璞★紝灝卞儚鏁版嵁搴撶殑澧炲垹鏀規煡鎿嶄綔錛佺幇鍦ㄦ垜浠緇嗕粙緇嶈繖浜涙搷浣滐紝騫墮愭寮曞叆hash_map銆?em>multimap銆?/p>

    2銆乵ap涓殑綾誨瀷瀹氫箟

    鍏寵仈鏁扮粍錛?em>associative array錛夋槸鏈鏈夌敤鐨勭敤鎴峰畾涔夌被鍨嬩箣涓錛岀粡甯稿唴緗湪璇█涓敤浜庢枃鏈鐞嗙瓑銆備竴涓叧鑱旀暟緇勯氬父涔熺О涓簃ap錛屾湁鏃朵篃縐板瓧鍏革紙dictionary錛夛紝淇濆瓨涓瀵瑰箋傜涓涓肩О涓簁ey銆佺浜屼釜縐頒負鏄犲皠鍊糾apped-value銆?/p>

    鏍囧噯map鏄畾涔夊湪std鍛藉悕絀洪棿涓殑涓涓ā鏉匡紝騫惰〃紺轟負<map>銆傚畠棣栧厛瀹氫箟浜嗕竴緇勬爣鍑嗙被鍨嬪悕瀛楋細

    template<class Key,class T,class Cmp=less<key>,
    class A=allocator<pair<const Key,T>>
    class std::map
    {
    public:
    //types
    typedef Key    key_type;
    typedef T    mapped_type;
    typedef pair<const Key,T>    value_type;
    typedef    Cmp    key_compare;
    typedef A    allocator_type;
    typedef    typename    A::reference    reference;
    typedef    typename    A::const_reference    const_reference;
    typedef    implementation_define1    iterator;
    typedef implementation_define2    const_iterator;
    typedef    typename    A::size_type    size_type;
    typedef    typename    A::difference_type    difference_type;
    typedef    std::reverse_iterator<iterator>    reverse_iterator;
    typedef    std::reverse_iterator<const_iterator>    const_reverse_iterator;
    //...
    }

    娉ㄦ剰錛歮ap鐨剉alue_type鏄竴涓?key,value)瀵癸紝鏄犲皠鍊肩殑琚涓烘槸mapped_type銆傚洜姝わ紝涓涓猰ap鏄竴涓猵air<const Key,mapped_type>鍏冪礌鐨勫簭鍒椼備粠const Key鍙互鐪嬪嚭錛宮ap涓敭key鏄笉鍙慨鏀圭殑銆?/p>

    涓嶅緱涓嶆彁鐨勬槸map瀹氫箟涓瑿mp鍜孉閮芥槸鍙夐」銆侰mp鏄畾涔夊湪鍏冪礌涔嬮棿鐨勬瘮杈冩柟娉曪紝榛樿鏄?lt;鎿嶄綔錛汚鍗砤llocator鐢ㄦ潵鍒嗛厤鍜?strong>閲婃斁map鎬婚敭鍊煎鎵闇浣跨敤鐨勫唴瀛橈紝娌℃湁鎸囧畾鐨勮瘽鍗抽粯璁や嬌鐢ㄧ殑鏄疭TL鎻愪緵鐨勶紝涔熷彲浠ヨ嚜瀹氫箟allocator鏉ョ鐞嗗唴瀛樼殑浣跨敤銆傚鏁版儏鍐碉紝鎴戜滑涓嶆寚瀹氳繖涓や釜閫夐」鑰屼嬌鐢ㄩ粯璁ゅ鹼紝榪欐牱鎴戜滑瀹氫箟map灝卞儚涓嬮潰榪欐牱錛?/p>

    map<int,clientInfo> clientMap;

    Cmp鍜孉閮界己鐪併?閫氬父錛屽疄闄呯殑榪唬鍣ㄦ槸瀹炵幇瀹氫箟鐨勶紝鍥犱負map寰堝儚浣跨敤浜嗘爲鐨勫艦寮忥紝榪欎簺榪唬鍣ㄩ氬父鎻愪緵鏍戦亶鍘嗙殑鏌愮褰㈠紡銆傞嗗悜榪唬鍣ㄦ槸浣跨敤鏍囧噯鐨剅everse_iterator妯℃澘鏋勯犵殑銆?/p>

    3銆乵ap涓殑榪唬鍣ㄥ拰閿煎

    map鎻愪緵鎯父鐨勮繑鍥炶凱浠e櫒鐨勪竴緇勫嚱鏁幫紝濡備笅鎵紺猴細

    template<class Key,class T,class Cmp=less<key>,
    class A=allocator<pair<const Key,T>>
    class std::map
    {
    public:
    //...
    //iterators
    iterator    begin();
    const_iterator    begin()    const;
    iterator    end();
    const_iterator    end()    const;
    reverse_iterator    rbegin();
    const_reverse_iterator    rbegin()    const;
    reverse_iterator    rend();
    const_reverse_iterator    rend()    const;
    //...
    }

    map涓婄殑榪唬鍣ㄦ槸pair<const Key,mapped_type>鍏冪礌搴忓垪涓婄畝鍗曠殑榪唬銆備緥濡傦紝鎴戜滑鍙兘闇瑕佹墦鍗板嚭鎵鏈夌殑瀹㈡埛绔俊鎭紝鍍忎笅闈㈢殑紼嬪簭榪欐牱銆備負浜嗗疄鐜拌繖涓紝鎴戜滑棣栧厛鍚戙婁緥瀛愬紩鍏ャ嬩腑瀹氫箟鐨刢lientEdp涓彃鍏ユ暟鎹紝鐒跺悗鎵撳嵃鍑烘潵錛?/p>

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    typedef    int    clientId;
    typedef struct{
    int scanRate;
    string socketAddr;
    }clientInfo;
    int main(int argc,char** argv)
    {
    typedef map<clientId,clientInfo> clientEdp;
    typedef map<clientId,clientInfo>::const_iterator iterator;
    clientEdp clients;
    clientInfo client[100];
    char str[10];
    string strAddr("socket addr client ");
    for(int i=0;i<100;i++)
    {
    client[i].scanRate=i+1;
    //convert int to char*
    itoa(i+1,str,10);
    //concatenate strAddr and str
    client[i].socketAddr=strAddr+str;
    cout<<client[i].socketAddr<<endl;
    clients.insert(
    make_pair(i+1,client[i]));
    }
    delete str;
    for(iterator i=clients.begin();i!=clients.end();i++)
    {
    cout<<"clientId:"<<i->first<<endl;
    cout<<"scanRate:"<<i->second.scanRate<<endl;
    cout<<"socketAddr:"<<i->second.socketAddr<<endl;
    cout<<endl;
    }
    }

    涓涓猰ap榪唬鍣ㄤ互key鍗囧簭鏂瑰紡琛ㄧず鍏冪礌錛屽洜姝ゅ鎴風淇℃伅浠liendId鍗囧簭鐨勬柟寮忚緭鍑恒傝繍琛岀粨鏋滃彲浠ヨ瘉鏄庤繖涓鐐癸紝榪愯緇撴灉濡備笅鎵紺猴細

    image

    鍥?銆佺▼搴忚繍琛岀粨鏋?/p>

    鎴戜滑浠irst寮曠敤閿煎鐨刱ey錛屼互second寮曠敤mapped value錛屼笖涓嶇敤綆ey鍜宮apped value鏄粈涔堢被鍨嬨傚叾瀹瀙air鍦╯td鐨勬ā鏉夸腑鏄繖鏍峰畾涔夌殑錛?/p>

    template <class    T1,class T2>struct std::pair{
    typedef    T1    first_type;
    typedef    T2    second_type;
    T1    first;
    T2    second;
    pair():first(T1()),second(T2()){}
    pair(const T1& x,const T2& y):first(x),second(y){}
    template<class U,class V>
    pair(const pair<U,V>& p):first(p.first),second(p.second){}
    }

    鍗砿ap涓紝key鏄敭鍊煎鐨勭涓涓厓绱犱笖mapped value鏄浜屼釜鍏冪礌銆俻air鐨勫畾涔夊彲浠ュ湪<utility>涓壘鍒幫紝pair鎻愪緵浜嗕竴涓柟娉曟柟渚垮垱寤洪敭鍊煎錛?/p>

    template <class T1,class T2>pair<T1,T2>
    std::make_pair(const T1& t1,const T2& t2)
    {
    return pair<T1,T2>(t1,t2);
    }

    涓婇潰鐨勪緥瀛愪腑鎴戜滑灝辯敤鍒頒簡榪欎釜鏂規硶鏉ュ垱寤?clientId,clientInfo)瀵癸紝騫朵綔涓篒nsert()鏂規硶鐨勫弬鏁般傛瘡涓猵air榛樿鍒濆鍖栨瘡涓厓绱犵殑鍊間負瀵瑰簲綾誨瀷鐨勯粯璁ゅ箋?/p>

    4銆乵ap涓殑鏋勯犲嚱鏁頒笌鏋愭瀯鍑芥暟

    map綾繪儻甯告彁渚涗簡鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟錛屽涓嬫墍紺猴細

    template<class Key,class T,class Cmp=less<key>,
    class A=allocator<pair<const Key,T>>
    class std::map
    {
    //...
    //construct/copy/destroy
    explicit map(const Cmp&=Cmp(),const A&=A());
    template<class In>map(In first,In last,
    const Com&=Cmp(),const A&=A());
    map(const map&);
    ~map();
    map& operator=(const map&);
    //...
    }

    澶嶅埗涓涓鍣ㄦ剰鍛崇潃涓哄畠鐨勬瘡涓厓绱犲垎閰嶇┖闂達紝騫舵嫹璐濇瘡涓厓绱犲箋傝繖鏍峰仛鏄ц兘寮閿鏄緢澶х殑錛屽簲璇ヤ粎褰撻渶瑕佺殑鏃跺欐墠榪欐牱鍋氥?strong>鍥犳錛宮ap浼犵殑鏄紩鐢?/strong>銆?/p>

    5銆乵ap涓殑鎿嶄綔鏂規硶

    鍓嶉潰鎴戜滑宸茬粡璇磋繃錛屽鏋渕ap涓粎瀹氫箟浜嗕竴浜沰ey銆乵apped value綾誨瀷鐨勪俊鎭屾病鏈夋搷浣滄柟娉曪紝灝卞瀹氫箟涓粎鏈夊瓧孌電殑綾繪剰涔変笉澶х敋鑷蟲鏃犳剰涔夈傜敱姝ゅ彲瑙乵ap涓畾涔夋搷浣滄柟娉曢潪甯擱噸瑕侊紒鍓嶉潰鐨勪緥瀛愭垜浠氨鐢ㄥ埌浜嗕笉灝戞柟娉曪紝濡傝繑鍥炶凱浠e櫒鐨勬柟娉昩egin()銆乪nd()錛岄敭鍊煎鎻掑叆鏂規硶insert()銆備笅闈㈡垜浠map涓殑鎿嶄綔鏂規硶鍋氫釜鍏ㄩ潰鐨勪粙緇嶏細

    template<class Key,class T,class Cmp=less<key>,
    class A=allocator<pair<const Key,T>>
    class std::map
    {
    //...
    //map operations
    //find element with key k
    iterator find(const key_type& k);
    const_iterator find(const key_type& k) const;
    //find number of elements with key k
    size_type count() const;
    //find first element with key k
    iterator lower_bound(const key_type& k);
    const_iterator lower_bound(const key_type& k) const;
    //find first element with key greater than k
    iterator upper_bound(const key_type& k);
    const_iterator upper_bound(const key_type& k) const;
    //insert pair(key,value)
    pair<iterator,bool>insert(const value_type& val);
    iterator insert(iterator pos,const value_type& val);
    template<class In>void insert(In first,In last);
    //erase element
    void erase(iterator pos);
    size_type erase(const key_type& k);
    void erase(iterator first,iterator last);
    void clear();
    //number os elements
    size_type size() const;
    //size of largest possible map
    size_type max_size() const;
    bool empty() const{return size()==0;}
    void swap(map&);
    //...
    }

    涓婇潰榪欎簺鏂規硶鍩烘湰閮借兘欏懼悕鎬濅箟錛圥S.鐢辨鍙錛屽懡鍚嶆湁澶氶噸瑕侊紝鎴戜滑騫蟲椂瑕佸吇鎴愬ソ鐨勫懡鍚嶄範鎯紝褰撶劧娉ㄩ噴涔熷繀涓嶅彲灝戯紒錛夈傝櫧鐒跺凡緇忛潪甯告竻妤氫簡浜嗭紝浣嗘垜榪樻槸鎯寵瑙d竴涓嬩互娑堥櫎涓嶆儨瑕佺殑璇В鍜屾洿濂藉湴搴旂敤榪欎簺鏂規硶銆?/p>

    • find(k)鏂規硶綆鍗曞湴榪斿洖閿間負k鐨勫厓绱犵殑榪唬鍣紱濡傛灉娌℃湁鍏冪礌鐨勯敭鍊間負k錛屽垯榪斿洖map鐨別nd()榪唬鍣ㄣ傜敱浜巑ap鏄寜閿甼ey鍗囧簭鎺掑垪錛屾墍鏈夋煡鎵劇殑澶嶆潅搴﹀彧鏈塐(logN)銆傚洜姝わ紝鎴戜滑閫氬父浼氳繖鏍風敤榪欎釜鏂規硶錛?
      #include<iostream>
          #include<map>
          #include<string>
          using namespace std;
          typedef    int    clientId;
          typedef struct{
          int scanRate;
          string socketAddr;
          }clientInfo;
          int main(int argc,char** argv)
          {
          typedef map<clientId,clientInfo> clientEdp;
          typedef map<clientId,clientInfo>::const_iterator iterator;
          clientEdp clients;
          clientInfo client[100];
          char* str=new char[10];
          string strAddr("socket addr client ");
          for(int i=0;i<100;i++)
          {
          client[i].scanRate=i+1;
          //convert int to char*
          itoa(i+1,str,10);
          //concatenate strAddr and str
          client[i].socketAddr=strAddr+str;
          clients.insert(
          make_pair(i+1,client[i]));
          }
          delete str;
              clientId id=10;
          iterator i=clients.find(id);
          if(i!=clients.end()){
          cout<<"clientId: "<<id
          <<" exists in clients"<<endl;
          }
          else{
          cout<<"clientId: "<<id
          <<" doesn't exist in clients"<<endl;
          }
          }
    • insert()鏂規硶 璇曞浘灝嗕竴涓紙Key,T錛夐敭鍊煎鍔犲叆map銆傚洜涓洪敭鏃跺敮涓鐨勶紝鎵浠ヤ粎褰搈ap涓笉瀛樺湪閿間負k鐨勯敭鍊煎鏃舵彃鍏ユ墠鎴愬姛銆傝鏂規硶鐨勮繑鍥炲間負pair<iterator,bool>錛屽鏋滄彃鍏ユ垚鍔焍ool鍊間負TRUE錛宨terator鎸囧悜鎻掑叆map涓悗鐨勯敭鍊煎銆傚涓嬩唬鐮侊細
      #include<iostream>
          #include<map>
          #include<string>
          using namespace std;
          typedef    int    clientId;
          typedef struct{
          int scanRate;
          string socketAddr;
          }clientInfo;
          int main(int argc,char** argv)
          {
          typedef map<clientId,clientInfo> clientEdp;
          typedef map<clientId,clientInfo>::const_iterator iterator;
          clientEdp clients;
          clientId id=110;
          clientInfo cltInfo;
          cltInfo.scanRate=10;
          cltInfo.socketAddr="110";
          pair<clientId,clientInfo> p110(id,cltInfo);
          pair<iterator,bool> p=clients.insert(p110);
          if(p.second){
          cout<<"insert success!"<<endl;
          }
          else{
          cout<<"insert failed!"<<endl;
          }
          //i points to clients[110];
          iterator i=p.first;
          cout<<i->first<<endl;
          cout<<i->second.scanRate<<endl;
          cout<<i->second.socketAddr<<endl;
          }

    涓婇潰鎴戜滑鐪嬪嚭錛岃繖閲屾垜浠彃鍏ラ敭鍊煎鏄鍏堝0鏄庝竴涓敭鍊煎pair<clientId,clientInfo> p110(id,cltInfo); 鐒跺悗鍐嶆彃鍏ワ紝榪欎釜鎴戜滑涔嬪墠make_pair鏂規硶涓嶄竴鏍鳳紝make_pair鏂規硶鐢ㄧ殑姣旇緝澶氥?/p>

    • erase()鏂規硶鐢ㄦ硶姣旇緝綆鍗曪紝姣斿鍍忔竻闄lientId涓?10鐨勯敭鍊煎錛屾垜浠彧闇瑕佸clients璋冪敤erase鏂規硶錛?span style="color: #ff8040;">clients.erase(clients.find(110));鎴栬呮垜浠兂娓呴櫎clientId浠?鍒?0鐨勯敭鍊煎錛屾垜浠彲浠ヨ繖鏍瘋皟鐢╡rase()鏂規硶錛?span style="color: #ff8040;">clients.erase(clients.finds(1),clients.find(10));綆鍗曞惂錛佸埆寰楁剰錛屼綘榪橀渶瑕佹敞鎰忥紝濡傛灉find(k)榪斿洖鐨勬槸end()錛岃繖鏍瘋皟鐢╡rase()鏂規硶鍒欐槸涓涓弗閲嶇殑閿欒錛屼細瀵筸ap閫犳垚鐮村潖鎿嶄綔銆?

    6銆佸啀璁甿ap鐨勬彃鍏ユ搷浣?/strong>

    鍓嶉潰鎴戜滑浠嬬粛浜嗗埄鐢╩ap鐨勬彃鍏ユ柟娉昳nsert()錛屽0鏄庨敭鍊煎pair鎴杕ake_pair鐢熸垚閿煎鐒跺悗鎴戜滑鍙互杞繪澗鐨勫皢閿煎鎻掑叆map涓傚叾瀹瀖ap榪樻彁渚涗簡鏇存柟渚跨殑鎻掑叆鎿嶄綔鍒╃敤涓嬫爣錛坰ubscripting錛孾]錛夋搷浣滐紝濡備笅錛?/p>

    clientInfo cltInfo;
    cltInfo.scanRate=10;
    cltInfo.socketAddr="110";
    clients[110]=cltInfo;

    榪欐牱鎴戜滑灝卞彲浠ョ畝鍗曞湴灝嗛敭鍊煎鎻掑叆鍒癿ap涓簡銆備笅鏍囨搷浣滃湪map涓紡榪欐牱瀹氫箟鐨勶細

    template<class Key,class T,class Cmp=less<key>,
    class A=allocator<pair<const Key,T>>
    class std::map
    {
    //...
    //access element with key k
    mapped_type& operator[](const key_type& k);
    //...
    }

    鎴戜滑鏉ュ垎鏋愪竴涓嬪簲鐢╗]鎿嶄綔錛屾彃鍏ラ敭鍊煎鐨勮繃紼嬶細媯鏌ラ敭k鏄惁宸茬粡鍦╩ap閲屻傚鏋滀笉錛屽氨娣誨姞涓婏紝浠浣滀負瀹冪殑瀵瑰簲鍊箋傚鏋渒宸茬粡鍦╩ap閲岋紝瀹冪殑鍏寵仈鍊艱鏇存柊鎴恦銆傝繖閲岄鍏堬紝鏌ユ壘110涓嶅湪map涓垯鍒涘緩涓涓敭涓?10鐨勯敭鍊煎錛屽茍灝嗘槧灝勫艱涓洪粯璁ゅ鹼紝榪欓噷scanRate涓?錛宻ocketAddr涓虹┖錛涚劧鍚庡皢鏄犲皠鍊艱祴涓篶ltInfo銆?濡傛灉110鍦╩ap涓凡緇忓瓨鍦ㄧ殑璇濓紝鍒欏彧鏄洿鏂頒互110涓洪敭鐨勬槧灝勫箋?/p>

    浠庝笂闈㈢殑鍒嗘瀽鍙煡錛氬鏋滃ぇ閲忚繖鏍鋒彃鍏ユ暟鎹紝浼氫弗閲嶅獎鍝嶆晥鐜囷紒濡傛灉浣犺冭檻鏁堢巼闂錛岃浣跨敤insert鎿嶄綔銆俰nsert鏂規硶錛岃妭鐪佷簡涓夋鍑芥暟璋冪敤錛氫竴涓緩绔嬩復鏃剁殑榛樿鏄犲皠鍊肩殑瀵硅薄錛屼竴涓攢姣侀偅涓復鏃剁殑瀵硅薄鍜屼竴涓鏄犲皠鍊肩殑璧嬪兼搷浣溿?/p>

    Note1錛?/strong>濡傛灉k宸茬粡瀛樺湪map涓紝[]鏁堢巼鍙嶈屾瘮insert鐨勬晥鐜囬珮錛岃屼笖鏇寸編瑙傦紒濡傛灉鑳藉鍏奸【榪欎袱鑰呴偅宀備笉鏄緢緹庡錛佸叾瀹炴垜浠噸鍐檓ap涓殑[]鎿嶄綔錛氶鍏堝垽鏂璳鏄惁宸茬粡鍦╩ap涓紝濡傛灉娌℃湁鍒欒皟鐢╥nsert鎿嶄綔錛屽惁鍒欒皟鐢ㄥ唴緗殑[]鎿嶄綔銆傚涓嬪垪浠g爜錛?/p>

    //////////////////////////////////////////////
    ///@param MapType-map鐨勭被鍨嬪弬鏁?
    ///@param KeyArgType-閿殑綾誨瀷鍙傛暟
    ///@param ValueArgtype-鏄犲皠鍊肩殑綾誨瀷鍙傛暟
    ///@return 榪唬鍣紝鎸囧悜閿負k鐨勯敭鍊煎
    //////////////////////////////////////////////
    template<typename MapType,
    typename KeyArgType,
    typename ValueArgtype>
    typename MapType::iterator
    efficientAddOrUpdate(MapType& m,
    const KeyArgType& k,
    const ValueArgtype& v)
    {
    typename MapType::iterator Ib =    m.lower_bound(k);
    if(Ib != m.end()&&!(m.key_comp()(k,Ib->first))) {
    //key宸茬粡瀛樺湪浜巑ap涓仛鏇存柊鎿嶄綔
    Ib->second = v;
    return Ib;
    }
    else{
    //key涓嶅瓨鍦╩ap涓仛鎻掑叆鎿嶄綔
    typedef typename MapType::value_type MVT;
    return m.insert(Ib, MVT(k, v));
    }
    }

    Note2錛?/strong>鎴戜滑瑙嗕箮榪樺拷鐣ヤ簡涓鐐癸紝濡傛灉鏄犲皠鍊糾apped value鐨勭被鍨嬫病鏈夐粯璁ゅ鹼紝鎬庝箞鍔烇紵榪欑鎯呭喌璇峰嬁浣跨敤[]鎿嶄綔鎻掑叆銆?/p>

    7銆乕]涓嶄粎鎻掑叆

    閫氳繃[]鎿嶄綔涓嶄粎浠呮槸鎻掑叆閿煎錛屾垜浠篃鍙互閫氳繃閿甼ey媯绱㈠嚭鏄犲皠鍊糾apped value銆傝屼笖鎴戜滑鍒╃敤[]鎿嶄綔鍙互杞繪澗鍦扮粺璁′俊鎭紝濡傛湁榪欐牱榪欐牱涓浜涢敭鍊煎錛坆ook-name錛宑ount錛夊錛?/p>

    (book1,1)銆?book2,2)銆?book1,2)銆?book3,1)銆?book3,5)

    鎴戜滑璁$畻姣忕book鐨勬暟閲忔誨拰銆傛垜浠彲浠ヨ繖鏍峰仛錛氬皢瀹冧滑璇誨叆涓涓猰ap<string,int>錛?/p>

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    int main(int argc,char** argv)
    {
    map<string,int> bookMap;
    string book;
    int count;
    int total=0;
    while(cin>>book>>count)
    bookMap[book]+=count;
    map<string,int>::iterator i;
    for(i=bookMap.begin();i!=bookMap.end();i++)
    {
    total+=i->second;
    cout<<i->first<<'\t'<<i->second<<endl;
    }
    cout<<"total count:"<<total<<endl;
    }

    緇撴灉濡備笅鎵紺猴細錛堟敞鎰忔寜浣廲trl+z閿粨鏉熻緭鍏ワ級

    image

    鍥?銆佺▼搴忚繍琛岀粨鏋?/p>

    8銆乵ultimap

    鍓嶉潰浠嬬粛浜唌ap錛屽彲浠ヨ宸茬粡闈炲父娓呮櫚浜嗐傚鏋滃厑璁竎lientId閲嶅鐨勮瘽錛宮ap灝辨棤鑳戒負鍔涗簡錛岃繖鏃跺欏氨寰梞ultimap涓婂満浜嗭紒multimap鍏佽閿甼ey閲嶅錛屽嵆涓涓敭瀵瑰簲澶氫釜鏄犲皠鍊箋?/strong>鍏跺疄闄ゆ涔嬪錛宮ultimap璺焟ap鏄緢鍍忕殑錛屾垜浠帴涓嬫潵鍦╩ap鐨勫熀紜涓婁粙緇峬ultimap銆?/p>

    multimap鍦╯td涓殑瀹氫箟璺焟ap涓鏍峰彧鏄被鍚嶄負multimap錛宮ultimap鍑犱箮鏈塵ap鐨勬墍鏈夋柟娉曞拰綾誨瀷瀹氫箟銆?/p>

    • multimap涓嶆敮鎸乕]鎿嶄綔錛涗絾map鏀寔
    • multimap鐨刬nsert鏂規硶榪斿洖鐨勬槸涓涓凱浠e櫒iterator錛屾病鏈塨ool鍊鹼紱鑰宮ap鍊鹼紙iterator錛宐ool錛夌殑鍏冪礌瀵?
    • 瀵瑰簲equal_range()銆佹柟娉曪細
      pair<iterator,iterator> equal_range(const key_type& k);
          pair<const_iterator,const_iterator>
          equal_range(const key_type& k) const;
          //find first element with key k
          iterator lower_bound(const key_type& k);
          const_iterator lower_bound(const key_type& k) const;
          //find first element with key greater than k
          iterator upper_bound(const key_type& k);
          const_iterator upper_bound(const key_type& k) const;
      铏界劧鍦╩ap鍜宮ultimap閮芥湁錛屾樉鐒跺multimap鏈夋洿澶氱殑鎰忎箟錛乪qual_range()鏂規硶榪斿洖涓涓敭key瀵瑰簲鐨勫涓槧灝勫肩殑涓婄晫鍜屼笅鐣岀殑閿煎鐨勮凱浠e櫒銆乴ower_bound()鏂規硶榪斿洖閿甿ultimap涓涓涓涓簁ey鐨勯敭鍊煎榪唬鍣ㄣ乽pper_bound()鏂規硶榪斿洖姣攌ey澶х殑絎竴涓敭鍊煎榪唬鍣ㄣ?

    鍋囪鎴戜滑鎯沖彇鍑洪敭涓簁ey鐨勬墍鏈夋槧灝勫鹼紝鎴戜滑鍙互榪欐牱鍋氾細

    #include<iostream>
    #include<map>
    #include<string>
    using namespace std;
    typedef int clientId;
    typedef struct{
    int scanRate;
    string socketAddr;
    }clientInfo;
    int main(int argc,char** argv)
    {
    typedef multimap<clientId,clientInfo> clientEdp;
    typedef multimap<clientId,clientInfo>::const_iterator iterator;
    clientEdp clients;
    clientInfo client[20];
    char* str=new char[10];
    string strAddr("socket addr client ");
    for(int i=0;i<10;i++)
    {
    client[i].scanRate=i+1;
    //convert int to char*
    itoa(i+1,str,10);
    //concatenate strAddr and str
    client[i].socketAddr=strAddr+str;
    clients.insert(
    make_pair(10,client[i]));
    }
    for(int i=10;i<20;i++)
    {
    client[i].scanRate=i+1;
    //convert int to char*
    itoa(i+1,str,10);
    //concatenate strAddr and str
    client[i].socketAddr=strAddr+str;
    clients.insert(
    make_pair(i+1,client[i]));
    }
    delete str,strAddr;
        //find elements with key 10
    iterator lb=clients.lower_bound(10);
    iterator ub=clients.upper_bound(10);
    for(iterator i=lb;i!=ub;i++)
    {
    cout<<"clientId:"<<i->first<<endl;
    cout<<"scanRate:"<<i->second.scanRate<<endl;
    cout<<"socketAddr:"<<i->second.socketAddr<<endl;
    cout<<endl;
    }
    }

    錛堣鏄庯細瀹為檯涓婏紝涓鑸槸涓嶅厑璁竎lientId閲嶅鐨勶紝榪欓噷鍙槸涓轟簡涓句緥銆傦級榪欐牱鏄笉鏄劅瑙夊緢涓戝憿錛佷簨瀹炰笂錛屾垜浠彲浠ユ洿綆鍗曠殑榪欐牱錛?/p>

    //find elements with key 10
    pair<iterator,iterator> p=clients.equal_range(10);
    for(iterator i=p.first;i!=p.second;i++)
    {
    cout<<"clientId:"<<i->first<<endl;
    cout<<"scanRate:"<<i->second.scanRate<<endl;
    cout<<"socketAddr:"<<i->second.socketAddr<<endl;
    cout<<endl;
    }

    鎬葷粨

    map鏄竴綾誨叧鑱斿紡瀹瑰櫒銆傚畠鐨勭壒鐐規槸澧炲姞鍜屽垹闄よ妭鐐瑰榪唬鍣ㄧ殑褰卞搷寰堝皬錛岄櫎浜嗛偅涓搷浣滆妭鐐癸紝瀵瑰叾浠栫殑鑺傜偣閮芥病鏈変粈涔堝獎鍝嶃傚浜庤凱浠e櫒鏉ヨ錛屽彲浠ヤ慨鏀瑰疄鍊鹼紝鑰屼笉鑳戒慨鏀筴ey銆?

    map鐨勫姛鑳斤細

    • 鑷姩寤虹珛Key 錛峷alue鐨勫搴斻俴ey 鍜寁alue鍙互鏄換鎰忎綘闇瑕佺殑綾誨瀷銆?
    • 鏍規嵁key鍊煎揩閫熸煡鎵捐褰曪紝鏌ユ壘鐨勫鏉傚害鍩烘湰鏄疞og(N)銆?
    • 蹇熸彃鍏ey - Value 璁板綍銆?
    • 蹇熷垹闄よ褰?
    • 鏍規嵁Key 淇敼value璁板綍銆?
    • 閬嶅巻鎵鏈夎褰曘?

    灞曟湜錛氭湰鏂囦笉鐭ヤ笉瑙夊啓浜嗕笉灝戝瓧浜嗭紝浣嗕粛鏈繁鍏ユ秹鍙婂埌map瀹氫箟鐨勭3涓拰絎?涓弬鏁幫紝浣跨敤鐨勯兘鏄粯璁ゅ箋?/p>

    template<class Key,class T,class Cmp=less<key>,
        class A=allocator<pair<const Key,T>>

    鎰熷叴瓚h咃紝璇鋒煡鎵劇浉鍏寵祫鏂檕r涓嬮潰鐣欒█甯屾湜鐪嬪埌鍗曠嫭寮綃囦粙緇峬ap絎?涓拰絎?涓弬鏁般傛偍鐨勬敮鎸侊紝鎴戠殑鍔ㄥ姏錛丳S錛氬湪姝ゆ枃鐨勫師鍥狅紝鍦ㄤ笌鍏徃鍋氶」鐩敤鍒頒簡map鐗規鎬葷粨鍑烘潵涓庡ぇ瀹跺叡浜紝涓嶈繃鍦ㄨ繘琛屼釜浜烘葷粨榪囩▼涓紝闅懼厤浼氭湁鐤忔紡鎴栦笉褰撲箣澶勶紝璇蜂笉鍚濇寚鍑恒?/p>

    鍙傝冩枃鐚細

    銆?銆戙奣he C++ Programming Language (Special Edition)銆?/p>

    銆?銆戙奅ffective STL銆?/p>

    ]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲成色777777女色窝| 免费成人网www| 亚洲第一级黄色片| 欧美成人免费全部| 欧美va亚洲va日韩∨a综合色| 久久夜色精品国产欧美乱极品| 久久婷婷亚洲| 亚洲精品123区| 一本色道久久综合| 亚洲欧美国产日韩天堂区| 久久网站免费| 91久久久久久久久| 在线播放亚洲| 蘑菇福利视频一区播放| 久久天堂国产精品| 欧美成人精品h版在线观看| 欧美va亚洲va香蕉在线| 亚洲欧洲免费视频| 亚洲综合国产精品| 久久精品道一区二区三区| 欧美a一区二区| 国产精品入口夜色视频大尺度| 国产欧美69| 在线日韩中文| 午夜免费电影一区在线观看| 久热精品在线| 亚洲色图在线视频| 麻豆freexxxx性91精品| 国产精品久线观看视频| 亚洲人成网站777色婷婷| 亚洲午夜伦理| 亚洲国产精品久久久| 亚洲午夜视频在线观看| 欧美gay视频激情| 国产日韩三区| 亚洲一区bb| 亚洲第一成人在线| 久久精品国产欧美亚洲人人爽| 欧美交受高潮1| 国内精品模特av私拍在线观看| 99国产精品视频免费观看| 久久久欧美精品| 中文国产成人精品| 国产精品久久久久一区| 国产一区二区三区四区老人| 亚洲手机视频| 91久久国产自产拍夜夜嗨| 欧美一区二区三区四区高清| 欧美日韩在线亚洲一区蜜芽| 亚洲第一在线视频| 久久久精品动漫| 日韩视频一区二区三区在线播放免费观看 | 日韩一本二本av| 久久综合导航| 国产一区二区三区久久久| 亚洲午夜电影网| 亚洲欧洲日产国产综合网| 久久综合色一综合色88| 国产日韩欧美电影在线观看| 午夜精品久久久久久久99热浪潮| 亚洲激情婷婷| 快射av在线播放一区| 狠久久av成人天堂| 久久久av水蜜桃| 欧美中文字幕精品| 国产情人节一区| 欧美在线高清视频| 欧美一级播放| 好吊成人免视频| 欧美成人精品| 欧美大片在线观看一区| 亚洲看片一区| 宅男66日本亚洲欧美视频| 国产精品视频精品视频| 久久精品国产精品| 久久天天躁夜夜躁狠狠躁2022| 在线精品观看| 91久久久亚洲精品| 国产精品美女久久福利网站| 欧美怡红院视频| 久久久久久国产精品mv| 亚洲精品一区二区网址 | 久久婷婷麻豆| 久久久综合激的五月天| 亚洲三级免费电影| 亚洲狼人综合| 国产偷自视频区视频一区二区| 久久网站免费| 欧美激情久久久| 午夜精品视频在线观看| 久久理论片午夜琪琪电影网| 亚洲精品国产拍免费91在线| 一本色道久久综合亚洲精品不| 国产精品久久久久免费a∨大胸 | 亚洲欧洲一区二区三区在线观看 | 欧美一区二区三区四区夜夜大片| 午夜精品理论片| 亚洲国产精品成人综合色在线婷婷| 亚洲国产三级| 国产伦精品一区二区三区免费| 久久久夜夜夜| 欧美日韩中文字幕| 久久久免费精品| 欧美午夜不卡| 欧美激情亚洲视频| 国产老女人精品毛片久久| 免费在线观看精品| 国产精品五区| 亚洲每日更新| 亚洲成人在线网站| 亚洲欧美第一页| 日韩亚洲成人av在线| 欧美一级视频| 亚洲视频免费在线观看| 久久久欧美精品sm网站| 先锋亚洲精品| 欧美日韩国产一区二区| 欧美1区2区3区| 国产免费观看久久| 亚洲麻豆av| 亚洲伦理在线| 麻豆91精品| 免费成人美女女| 国产日韩精品入口| 亚洲深爱激情| 亚洲天堂男人| 欧美久久影院| 最新国产拍偷乱拍精品| 亚洲国内欧美| 榴莲视频成人在线观看| 免费成人在线视频网站| 韩国精品一区二区三区| 欧美一区二区视频在线观看2020| 性欧美8khd高清极品| 国产精品女主播在线观看 | 亚洲欧美日韩另类| 欧美精品免费观看二区| 欧美电影电视剧在线观看| 伊人激情综合| 久久精品九九| 麻豆av福利av久久av| 有坂深雪在线一区| 久久亚洲午夜电影| 另类图片国产| 亚洲国产精品第一区二区三区| 久久久久久综合网天天| 乱人伦精品视频在线观看| 在线看欧美视频| 另类欧美日韩国产在线| 亚洲二区在线| 亚洲麻豆国产自偷在线| 欧美日本国产在线| 中文久久乱码一区二区| 亚洲女人天堂成人av在线| 欧美精品日韩www.p站| 久久色在线播放| 亚洲欧美一区二区三区在线| 欧美日韩在线播| 午夜国产精品视频免费体验区| 欧美有码视频| 在线成人黄色| 欧美电影在线免费观看网站| 亚洲精品日韩综合观看成人91| 亚洲视频免费| 国产午夜精品全部视频在线播放 | 国产精品高清免费在线观看| 亚洲视频一二三| 久久久精品欧美丰满| 亚洲国产精品女人久久久| 欧美日韩国产黄| 欧美一区二区私人影院日本| 免费久久精品视频| 中日韩高清电影网| 国产午夜精品久久久久久久| 毛片av中文字幕一区二区| 一区二区三区www| 蜜桃av久久久亚洲精品| 中文网丁香综合网| 国内精品久久久久久久97牛牛| 欧美激情亚洲激情| 欧美一区二区性| 亚洲精选成人| 久热国产精品| 亚洲欧美国产高清| 亚洲黄色影片| 韩日欧美一区二区| 国产精品久久久久久av福利软件| 久久久久免费| 亚洲欧美日本伦理| 日韩一二三区视频| 欧美成人精品一区二区三区| 亚洲伊人网站| 亚洲美女毛片| 在线观看视频日韩| 国产美女一区二区| 欧美日韩亚洲精品内裤| 麻豆精品一区二区综合av | 午夜久久久久久久久久一区二区| 亚洲国产欧美在线人成| 久久欧美肥婆一二区|