請詳細總結vim編輯器的使用并完成以下練習題
vim三種模式: 用法:vim [option…] FILE 編輯模式: 字符跳轉: h:向左移動一個字符 j:向下移動 k:向上移動 l:向右移動 w:跳轉至下一個單詞詞首 b:當前或上一個單詞詞首 e:跳轉至下一個單詞詞尾 ^:跳轉至行首的第一個非空白字符 0:跳轉至行首 $:跳轉至行尾 G:跳轉至文檔尾部 注:以上跳轉(除^、0、$)均可在前面加上數字表示跳轉數量:如5l表示跳轉至下5個字符 刪除: x:刪除單個字符,配合#x可以刪除指定個數字符 d: 刪除命令,可結合光標跳轉字符,實現范圍刪除; dd: 刪除光標所在的行,#dd:多行刪除; 復制粘貼: y:用法同d類似 替換: r:直接進行替換 可視化模式: v: 按字符選定 V:按行行定 撤消此前的編輯: u(undo):撤消此前的操作; #u: 撤消指定次數的操作; 撤消此前的撤消: Ctrl+r 翻屏操作: Ctrl+f: 向文件尾部翻一屏; Ctrl+b: 向文件首部翻一屏; Ctrl+d: 向文件尾部翻半屏; Ctrl+u:向文件首部翻半屏; 輸入模式: 從編輯模式切換至輸入模式: i: 在光標所在處輸入; I:在當前光標所在行的行首輸入; a: 在光標所在處后面輸入; A:在當前光標所在行的行尾輸入; o: 在當前光標所在行的下方打開一個新行; O:在當前光標所在行的上方打開一個新行; ESC從輸入模式退出至編輯模式 末行模式: 在編輯模式下輸入:即可切換至末行模式,ESC可退出末行模式進入編輯模式 (1) 地址定界:start,end #: 具體第#行; #,#: 從左側#表示行起始,到右側#表示行結尾; #,+#: 從左側#表示的行起始,加上右側#表示的行數; .: 當前行 $: 最后一行 %:全文, 相當于1,$ /pat1/,/pat2/:從第一次被pat1模式匹配到的行開始,一直到第一次被pat2匹配到的行結束; w /PATH/TO/SOMEWHERE: 將范圍內的行另存至指定文件中; r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有內容; (2) 查找 /PATTERN:從當前光標所在處向文件尾部查找; ?PATTERN:從當前光標所在處向文件首部查找; n:與命令同方向; N:與命令反方向; (3) 查找并替換 s: 在末行模式下完成查找替換操作 s/要查找的內容/替換為的內容/修飾符 要查找的內容:可使用模式 替換為的內容:不能使用模式,但可以使用\1, \2, …等后向引用符號;還可以使用“&”引用前 面查找時查找到的整個內容; 修飾符: i: 忽略大小寫 g: 全局替換;默認情況下,每一行只替換第一次出現; 查找替換中的分隔符/可替換為其它字符,例如s@@@、s### 多文件模式: vim FILE1 FILE2 FILE3 … :next 下一個 :prev 前一個 :first 第一個 :last 最后一個 :qall 退出所有 :wall 保存所有 窗口分隔模式: vim -o|-O FILE1 FILE2 … -o: 水平分割 -O: 垂直分割 在窗口間切換:Ctrl+w, Arrow 單文件窗口分割: Ctrl+w,s: split, 水平分割 Ctrl+w,v: vertical, 垂直分割 |
1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
[root@localhost ~]# sed 's@\(^[[:space:]]\+\)@#\1@g' /tmp/rc.sysinit
2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;
[root@localhost ~]# sed 's/^[[:space:]]\+//g' /tmp/grub.conf
3、刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行行的#和空白字符
[root@localhost ~]# sed 's/^#[[:space:]]\+//' /tmp/rc.sysinit
4、為/tmp/grub.conf文件中前三行的行首加#號;
sed '1,3s/^/#/g' /tmp/grub.conf
5、將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1;
vim /etc/yum.repos.d/CentOS-Media.repo 修改
6、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202
* */4 * * * cp -a /etc/* /backup/etc-`date +%Y%m%d%H%M`
7、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
* * * * 2,4,6 cp -a /var/log/messages /backup/messages_logs/messages-`date +%Y%m%d`
8、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
* */2 * * * grep "^S" /proc/meminfo >> /stats/memory.txt
9、工作日的工作時間內,每兩小時執行一次echo "howdy"
* 8-18/2 * * * echo "howdy"
腳本編程練習
10、創建目錄/tmp/testdir-當前日期時間;
#!/bin/bash # mkdir /tmp/testdir-$(date +%F)
11、在此目錄創建100個空文件:file1-file100
#/bin/bash # for i in {1..100};do touch /tmp/testdir-2016-07-16/file$i let i+=1 done
12、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
#!/bin/bash # i=0 l=$(wc -l /etc/passwd | cut -d" " -f1) while (( $i <= l )); do cat -n /etc/passwd | grep "^[[:space:]]\+$i\>" | awk '{print $2}' | awk -F: '{print $1}' let i+=2 done
13、創建10用戶user10-user19;密碼同用戶名;
#/bin/bash # for i in {10..19};do id user$i &>/dev/null && echo "the user is exists" || useradd user$i && echo "user$i" |passwd --stdin user$i &>/dev/null let i+=1 done
14、在/tmp/創建10個空文件file10-file19;
#/bin/bash # for i in {10..19};do if [ -e /tmp/file$i ];then echo "file$i exist." else touch /tmp/file$i fi let i+=1 done
15、把file10的屬主和屬組改為user10,依次類推。
#/bin/bash # for i in {10..19};do if [ -e /tmp/file$i ];then chown user$i:user$i /tmp/file$i else echo "no such file." fi let i+=1 done
原創文章,作者:dcstrike,如若轉載,請注明出處:http://www.www58058.com/23921
寫的很好,排版也很棒,可以嘗試自己畫一個思維導圖來總結vim,第5題自己有沒有感覺有點low?加油