---
# System prepended metadata

title: Linux 2020 讀書會 — 第三次

---

# Linux 2020 讀書會 — 第三次

[toc]

## Subject 1 - vim 程式編輯器
（我一個人跟不上ＱＱ所以都用截圖的，抱歉）
- vim
    - 介面乾淨
- Emacs
    - 
- why 要選 vim
    - Unix Like 都有內建
    - 程式編輯
- vimrc

    ![](https://i.imgur.com/YBy7ffJ.png)
- 一般指令模式
    ![](https://i.imgur.com/2tNqpBA.png)
- 一般指令模式（搜尋與取代）
![](https://i.imgur.com/O0aU9Qc.png)
- 一般指令模式（刪除 複製 貼上）
![](https://i.imgur.com/CZH0IC9.png)
- 編輯模式
![](https://i.imgur.com/HoYINEx.png)
- 指令列命令模式
![](https://i.imgur.com/MXuE7mj.png)
- 解決遇到特殊情況的方法
![](https://i.imgur.com/ofm5xgK.png)
    - 另一個更簡單的方式
    ![](https://i.imgur.com/2IiIfcM.png)

    
- 區塊選擇
![](https://i.imgur.com/f7InpGO.png)


:::info
補充的資源
1. [Mosky 的速查表](https://www.facebook.com/mosky.liu/posts/10219223188952341)
2. [俊甫的速查表](https://paper.dropbox.com/doc/Vim--BAjDnsyy1uqNf1CJF~UmPaL3Ag-qDLIjxGZuVdi43mO2nXuP)
3. https://vim.fandom.com/wiki/Folding
4. https://vimawesome.com/
7. https://twitter.com/MasteringVim
8. [Reddit 上的速查表](https://www.reddit.com/r/vim/comments/32r85c/this_is_my_favorite_vim_cheat_sheet_does_anyone/)

實用套件
- [vimawesome](https://vimawesome.com/)
- [YouCompleteMe 自動完成](https://github.com/ycm-core/YouCompleteMe)
- [ale 語法檢查](https://github.com/dense-analysis/ale)
- [vim-plug (🌺 Minimalist Vim Plugin Manager)](https://github.com/junegunn/vim-plug)
:::

## Subject 2 - 正規表示法與文件格式化
grep檔案:
http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt

printf檔案:
https://drive.google.com/file/d/1UAtWxTS7_GmQJ7PeuLBcFc0Hg0LrpFRX/view?usp=sharing

- 正規表示法是什麼呢？
![](https://i.imgur.com/MZ1u4me.png)
- grep 指令![](https://i.imgur.com/aF1Z0ie.png)




### grep
1. `grep -n 'the' regular.txt`
    -  -n 顯示行數
2. `grep -nv 'the' regular.txt` 
    - -v 反轉 (找不存在 the 的)
    
3. `grep -in 'the' regular.txt`
    

4. `grep -rl 'the' .`
    ：在這個目錄底下找出所有有包含 `the` 這個文字的檔案 
5. `grep -n 'the' regular.txt`

6. `grep -n 't[ae]st' regular.txt`
7. `grep -n '[[:lower:]]' regular.txt`
8. `grep -n '[^g]oo' regular.txt` : 除了ｇ之外的東西都可以
9. `grep -n '^goo' regular.txt` ：goo 字母是否有在一開始就出現
10. `grep -n '\.$' regular.txt` ：
    - `\` : 跳脫字元
    - 抓出點在結尾的
11. `grep -n 'g.d' regular.txt` ： 搜尋出任何 g 開頭中間含兩個字母的結尾為 d 的文字
12. `grep -n 'g.*d' regular.txt` : 
    - . : 任何字元
    - \* : 重複0次以上

    - 找出(god 、 good 、 gid ...)
14. `grep -n '[0-9]' regular.txt` : 找出所有 0~9 的字元
15. `grep -n 'go\{2,3\}g' regular_express.txt`

### sed
會幫你把輸入進來的資料去做插入刪除取代這些動作
1. `grep -n 'the' regular.txt | sed '2,4d'`
2. `grep -n 'the' regular.txt | sed '2,4a world'`
3. `grep -n 'the' regular.txt | sed '2,4i world'` 
4. `grep -n 'the' regular.txt | sed '2,4c world'` : 將 2-4 行都取代成 world
5. `grep -n 'the' regular.txt | sed 's/g.*d/HOI/g'`
6. `sed -i 's/g.*d/HOI/g' regular.txt` : 更改已存在的檔案的方法
### printf
1. `printf '%s\t%s\t%s\t%s\t\n' $(cat input.txt)`
2. `printf '%10s%5s%5s%5s\n' $(cat input.txt)`

### awk
![](https://i.imgur.com/CU4lBuO.png)
- 依照想要的格式或條件印出
1. `awk '{print $1 "\t" $3}' input.txt`
2. `awk '{print "name:"$1 "\t grade:" $3}' input.txt`
3. `awk '$3 < 60 {print $1 "\t" $3}' input.txt` ：在大括弧前加入`判斷式`
4. `awk 'total = $2+$3+$4{print $1 "\t" $3 "\t" total}'` ：在大括弧前加上`運算式`

### diff
- 比對兩個檔案之間的不同![](https://i.imgur.com/ZI5M1zW.png)

### cmp
- 將檔案轉換成二進位後去比較，若相同就不會輸出東西

