作者:洪海輝 《Linux 命令、編輯器與shell編程》(美)Mark G.Sobell 著 楊明軍 王鳳芹 譯 清華大學出版社 2007-12-24 終端處理字元: ctrl+z 掛起,可用fg切換到前台,jobs 查看後台任務情況; ctrl+w 刪除單詞; ctrl+u 刪除行 ctrl+x好像沒有效果; 定位工具: which 只在設定的路徑搜索,只報告第一個找到的; whereis 在標準路徑,顯示所有的; type 確定文件是否為內置命令; apropos 關鍵字 whatis 完全匹配關鍵字; 符號鏈接: 內置命令pwd顯示鏈接名; 工具(/bin/pwd)顯示路徑; info bash builtin 列出內置命令; 2007-12-25 vim的使用: ctrl+w 刪除單詞; ctrl+h 刪除行 ctrl+u; :redo ctrl+r 撤銷; ctrl+l 刷新; vim -r 檢查交換文件; 命令模式移動游標 字元移動 空格 h和l;Ff 字移動 Ww W按空白分隔字元 行移動 j k 句子 () 段 {} 屏幕 H M L 刪除 dG 刪除到末尾; d1G 從開始刪除; d0 從行的開始; ~ 修改大小寫; 替換 1,。 開始到當行; 。,$ 當前到末尾; 1,$ 或 % 所有; :1,$s/ten/te/g 所有行的所有ten替換成te; 2008-01-05 數組變數: 賦值 NAMES=(max helen sam zach) NAMES[1]=fly 引用值 #echo ${NAMES[2]} sam —————————————————————————————— 下標
和[@]的區別: 作用都是提取整個數組,但是加雙引號工作機制卻不同: @將原來的數組複製到新的數組,新舊一樣,相當於複製; *將原來的數組當一個元素複製到新的數組 例: A=("${NAMES }") B=("${NAMES[@]}") 用declare -a 顯示數組內容 [root@Test ~]# declare -a declare -a NAMES='([0]="max" [1]="helen" [2]="sam" [3]="zach")' declare -a A='([0]="max helen sam zach")' declare -a B='([0]="max" [1]="helen" [2]="sam" [3]="zach")' echo ${#NAMES } 元素的個數 [root@Test ~]# echo ${#NAMES } 4 echo ${#NAMES[0]} 元素的長度 [root@Test ~]# echo ${#NAMES[0]} 3 ————————————————————————————————— ((count=count-1))雙扣號,保證shell看成算術表達式,變數不用$ $$ 進程ID,方便創建唯一的文件名; $0 命令本身; $! 後台進程PID; $?退出狀態; $# 除命令本身外的參數個數; $*和$&的區別: $* 將所有參數當成一個整體(一個參數); $@ 和原來的一樣; 跟下標 [@]一樣 —————————————————————————————————— shift左移命令 為了得到任意一個參數,循環掃描命令行; set 初始命令行參數值; set $(date) set date ——————————————————————————————————— :- 使用默認值 ${name:-default} := 賦默認值 ${name:=default} : 內置命令 賦值並不執行 : ${name:=default} :? 顯示錯誤信息,並返回狀態1,shell不退出;${name:?message} ———————————————————————————————————— 路徑操作符 # 最小去除前綴; ## 最大去除前綴; % 最小去除前綴; %% 最大去除前綴; 例: [root@Test ~]# test=/usr/local/src/proftpd-1.2.10.tar.gz [root@Test ~]# echo ${test} /usr/local/src/proftpd-1.2.10.tar.gz [root@Test ~]# echo ${test#/*} usr/local/src/proftpd-1.2.10.tar.gz [root@Test ~]# echo ${test##/*} [root@Test ~]# echo ${test%/*} /usr/local/src [root@Test ~]# echo ${test%%/*} [root@Test ~]# echo ${#test} 顯示字元個數 36 ————————————————————————————————————— sed的使用: 參數: -n 顯示除了p指令; -i 將修改保存到文件; 指令: d 刪除,整行刪除; n 顯示選中的行當前,從輸入中讀入下一行; a 每一行之後追加文件,以\換行; i 行之前追加; c 替換文件(整行); s 替換地址; w 重定向到新文件; r 追加行之後; q 退出; 控制結構: !NOT $!d 除了末行之外; {} 指令組;為分隔 Pattern區和Hold區: Pattern:工作平台(保存剛讀入的行); Hold:臨時工作區 H P->H 將一個換行符和內容追加到H h P->H 將P區替換掉H G H->P 將一個換行符和內容追加到G g H->P 將H區替換掉P 例: sed '5 q' filename 顯示前5行; sed '2 a test' filename 第2行之後插入一個換行符和test; sed '/the/n;p' file 所有匹配the不顯示; sed 's/^. /\t&/' filename 行首不是空格插入製表符; (^. ) 行首不是空格; s/^/\t/ 行首插入製表符; s/ *$// 行尾的空格全部刪除; sed 'G' filename 每行之後插入一個空行; 倒序: 2,$ G h $! G —————————————————————————————— cat -A(-vET) -b 對非空行進行編號; -n 對所有行進行編號; -s 去除多餘的空白行; cut -c -d 分隔符; -f 例: [root@Test sh]# ll |tr -s ' ' ' '|cut -f 5,9 -d ' ' 2.3K a 2.2K b 4.0K BK/ 436 ip.1 452 ip.2 264 ip.a 85K ip.list 22K ipList.temp 486 sample.sh* 9.9K selectInfo.sh* 4.0K temp/ tr -s 將多個空格化成單個空格; [root@Test 20080114]# grep -n '^' test 1:a 2:b 3:c 4:d '^' 匹配所有的行; -n 對所有的行進行編號 [root@Test 20080114]# grep -h a * |sort|uniq -c 2 a -h 不顯示文件名; uniq -c 對於重複的行只顯示一遍,並對重複的次數進行統計; [root@Test 20080114]# vi $(grep -l 'a' *) 2 files to edit 編輯多個匹配的文件; -l 匹配的文件名; #kill -9 0 對於普通用戶來說相當於註銷; 對於root等於關機,請慎用; ———————————————————————————————— ls的參數: -A 顯示除了.. . 兩個外的所有文件; -F 顯示文件特徵; -r 逆順; -t 按修改時間; -x 行顯示; -1 一行顯示一個文件; ———————————————————————————————— sort 參數: -b 排除欄位之前的空格和TAB; -f 將小寫看成大寫(大寫在前); -n 算術排序,負號和小數點有意義; -r 逆順; -t x 分隔符x; -u 重複的行只顯示一次; -k start[,stop] 註: 大寫在小寫之前; 空白符在之前; 第一遍比較無相同,不進行第二遍查詢; 例: #sort --key=2 test 第2欄位; #sort -k 2 -f test 第2欄位,小寫看成大寫; #sort -k 2 -b test 第2欄位,欄位前面的空白符和TAB忽略; #sort -fb -k 3.4 test 第3欄位的第4個字元開始; #sort -b -k 3.4 -k -2f test 第一遍:第3欄位的第4字元 第二遍:第2欄位,小寫看成大寫; #sort -k 1 -k 5 test 先第一欄位(沒有指定結尾,便是到結束),再第五欄位; 但是如果第一遍比較沒有相同,不進行第2遍比較; #sort -k 1,1 -k 5 test 先第一欄位,-k 1,1(第一欄位的第一字元到stop:第一欄位) 再進行第五欄位; #sort -u -k 1f -k 1 test 進行二遍比較,當有大小寫相同的欄位時; —————————————————————————————— 正則表達式: 星號: /(.*)/ 與圓括弧最長匹配; /([^)]*)/ 與圓括弧最短匹配; 空正則表達式: /\(test\)/ 和/test/一樣; /a\(b*\)c/ 和/ab*c/一樣; 替換字元串: &符號 與正則匹配的字元串匹配 \n 轉義數字 例: :1,$/\([^,]*\),\(.*\)/\2 \1/ 1,$ 所有的行; \([^,]*\)和[^,]*一樣,匹配除逗號外的任意字元串; \2 代表第2個括弧內的正則; ———————————————————————————————— 擴展正則: + 匹配字元前面1個或多個; ?匹配字元前面0個或1個 例: /ab+c/ abc abbc /ab?c/ ac abc /(ab)+c/ abc ababc /(ab)?c/ c abc /ab|ac/ ab ac abac /^Exit|^Quit/ 以Exit 或者Quit 開頭的 /(D|N)\.Jones/ D.Jones N.JOnes vim中 \|代表 | 特殊字元: . 單個字元; * 與*前面的0個或者多個字元; \< 字的開始; \> 字的末尾;
[火星人
]
【讀書筆記】《Linux 命令、編輯器與shell編程》 已經有500 次圍觀
本文地址: http://coctec.com/docs/linux/show-post-187523.html