1. 程式人生 > >vim編輯器和bash算術運算入門

vim編輯器和bash算術運算入門

不存在 使用 sub file vim編輯 set 水平分隔 倒數 search

(一)vim末行模式

  • vim末行模式:內建的命令行接口
    • 地址定界
      • start_pos[,end_pos]
      • #:特定的第#行,例如5即第5行
        • .:表示當前行
        • $:表示最後一行,例如.,$-1表示從當前行到倒數第2行
        • #,#:指定行範圍,左側為起始行,右側為結束行,例如10,100表示從第10行到第100行共91行
        • #,+#:指定行範圍,左側為起始行,右側為偏移量,例如3,+7表示從第3行開始加後面7行共8行
        • %:表示全文,等於1,$
        • /PATTERN/:從光標位置往下,第一個被PATTERN匹配到的行,例如/Pattern/,$表示從匹配行到最後一行
        • 可同編輯命令一同使用,實現編輯操作
          • d/刪除,y/復制,c/修改
          • 中間沒有空格,編輯命令直接跟在地址定界後面
          • w FileName/內容另存為
          • r FileName/將另外一個文件合並進來
    • 查找
      • /PATTERN:從光標所在處開始,往後查找所有被PATTERN匹配到的字符串,光標停在第一個匹配到的字符串
      • ?PATTERN:從光標所在處開始,往前查找所有被PATTERN匹配到的字符串,光標停在第一個匹配到的字符串
      • n:下一個查找結果,與命令方向相同
      • N:上一個查找結果,與命令方向相反
    • 查找並替換
      • s/用來查找的內容/用來替換的內容/修飾符
        • 用來查找的內容:正則表達式
        • 用來替換的內容:不能使用正則表達式,但是可以引用
          • 如果“用來查找的內容”在模式中使用了分組符號,在“用來替換的內容”中可以使用後項引用\1,\2...
          • 或者直接引用“用來查找的內容”匹配到的全部文本,要使用&符號
        • 如果內容本身就帶有/符號,需要添加\進行轉義
        • 也可以將/變成其它不常用的字符,這樣內容本身的/符號就不需要轉義了,例如使用@符號,或者#符號等等
        • 修飾符
          • i:忽略大小寫(忽略查找的PATTERN中的大小寫)
          • g:全局替換,意味著一行中如果匹配到多次,則均替換;默認只替換每一行中的第一次出現
        • 例子
          • 1,20s/this/This/g
          • %[email protected]\<t\([[:alpha:]]\+\)\>@T\[email protected]:在全文中將所有的小寫t開頭的單詞轉換為大寫T開頭的單詞
          • %[email protected]\<t[[:alpha:]]\+\>@&[email protected]:在全文中將所有小寫t開頭的單詞後面加er
          • %[email protected]^#@@:刪除每一行前面的#號

練習:

1,復制/etc/grub2.cfg文件至/tmp目錄中,用查找替換命令刪除/tmp/grub2.cfg文件中所有行前面的空白字符

答案:

cp /etc/grub2.cfg /tmp

vim /tmp/grub2.cfg

:

%[email protected]^[[:space:]]\[email protected]@

2,復制/etc/rc.d/init.d/functions文件至/tmp目錄中,用查找替換命令為/tmp/functions文件中每個以空白字符開頭的行的行首加上#

答案:%[email protected]^[[:space:]]\+[^[:space:]]@#&@

3,為/tmp/grub2.cfg文件的前三行的行首加上#號

答案:1,3s/*/#&/

4,將/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替換為enabled=1,所有的gpgcheck=0替換為gpgcheck=1

答案:%[email protected]\(enabled\|gpgcheck\)[email protected]\[email protected]

  • vim的多文件模式
    • vim FILE1 FILE2 FILE3...
    • 在文件間切換:first/第一個文件,last/最後一個文件,next/下一個文件,previous/前一個文件
    • 保存並退出所有文件:wqall
    • 保存所以文件:wall
    • 退出所有文件:qall
    • 多窗口
      • 多文件
        • -o:水平分隔;ctrl+w,松開後按上下箭頭,可以切換文件;vim -o FILE1 FILE2 FILE3
        • -O:垂直分隔;ctrl+w,松開後按左右箭頭,可以切換文件
      • 單文件
        • ctrl+w,松開後按s,水平分隔單文件
        • ctrl+w,松開後按v,垂直分隔單文件
  • 定制vim的工作特性
    • 末行模式下的命令設定,僅對當前vim進程有效
    • 想永久有效,需要修改配置文件;直接把末行命令寫在配置文件裏就行
      • 全局:/etc/vimrc
      • 用戶個人:~/.vimrc,如果文件不存在,需要自己創建
    • 行號
      • 顯示:set number或者set nu
      • 取消:set nonumber或者set nonu
    • 括號匹配高亮(貌似現在vim一直高亮,命令無效了>_<)
      • 顯示:set showmatch或者set sm
      • 取消:set noshowmatch或者set nosm
    • 自動縮進
      • 啟用:set ai
      • 禁用:set noai
    • 高亮搜索結果
      • 啟用:set hlsearch
      • 禁用:set nohlsearch
    • 語法高亮
      • 啟用:syntax on
      • 禁用:syntax off
    • 忽略字符大小寫
      • 啟用:set ic
      • 禁用:set noic
    • 在末行模式下,可以用help命令獲得幫助,也可以help subject獲得某個主題的幫助,如help set

作業:如果設置tab鍵縮進4個字符,而不是8個

(二)bash腳本編程的算術運算

  • 算術運算符:+,-,*,/,**,%
  • 算術運算格式
    • let var=算術運算表達式
    • $[算術運算表達式]
    • $((算術運算表達式))
    • expr命令
      • 各個操作數和操作符之間都要有空格
      • 要想獲得結果,需要使用命令引用
  • 註:乘法符號在某些場景中需要使用轉義字符

練習:寫一個腳本,添加三個用戶,求這三個用戶的UID之和

vim編輯器和bash算術運算入門