Category: linux


linux vi

linux_vi

/word  :向游標之下尋找一個名稱為 word 的字串。

?word  :向游標之上尋找一個字串名稱為 word 的字串

hjkl   :左下上右

H      :游標移動到這個螢幕的最上方那一行的第一個字元

G      :移動到這個檔案的最後一行。
(nG     n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu))

L      :游標移動到這個螢幕的最下方那一行的第一個字元

aioAIO :都是寫入;差異在於寫入的位子不同,
例如:
1.假設有一檔案,內容為下:
aaaaa
bbbbb
ccccc

2.假設游標停在從左邊數來第三個b上,我們要寫入HELLO進去

3.1.如果使用參數 a  則 HELLO 輸出則為:
aaaaa
bbbHELLObb
ccccc

3.2.如果使用參數 A  則 HELLO 輸出則為:
aaaaa
bbbbbHELLO
ccccc

3.3.如果使用參數 i  則 HELLO 輸出則為:
aaaaa
bbHELLObbb
ccccc

3.4.如果使用參數 I  則 HELLO 輸出則為:
aaaaa
HELLObbbbb
ccccc

3.5.如果使用參數 o  則 HELLO 輸出則為:
aaaaa
bbbbb
HELLO
ccccc

3.6.如果使用參數 O  則 HELLO 輸出則為:
aaaaa
HELLO
bbbbb
ccccc

dd     :刪除游標所在的那一整列,(ndd  => n 為數字。刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 列 )
d1G    :刪除游標所在到第一行的所有資料
dG     :刪除游標所在到最後一行的所有資料
d$     :刪除游標所在處,到該行的最後一個字元
d0     :那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字
dw     :刪除游標所在之單字

X      :相當於Backspace鍵
x      :相當於Del鍵

p      :將複製的資料貼在游標的下插入一行
P      :將複製的資料貼在游標的上插入一行

c      :重複刪除多個資料,例如向下刪除 10 行+加上本身列,[ 10cj ]

ZZ     :檔案有更動過才會儲存離開,沒更動過的話會直接離開

: x     :等同於 :ZZ
:w!    :強制將資料寫入該檔案,但權限有影響。

:q!    :強制離開不儲存檔案

:e!    :將檔案復原到最後一次儲存時的狀態

:! command       :暫時的離開vi,執行完 命令後 回到vi下

linux 正規表示法 grepegrepsed

grep

-n          :在輸出開頭顯示為第幾列

-v word     :輸出沒有word字的列

-i word     :就算是WorD 一樣輸出,大小寫沒差
‘w[abo]rd’  :指定輸出字可能為,ward wbrd word 輸出有相同者

‘w[^abo]rd’ :指定輸出字不能為,ward wbrd word 有相同者不能輸出

‘^abc’      :指定輸出開頭為abc

‘abc$’      :指定輸出結尾為abc

‘\.$’       :指定輸出結尾為. <備註:\是用來解除他特殊意義>

‘w..d’      :意思是w和d之間存在兩個字元

‘ww*’       :會輸出兩種東西 1.一個w以上的字,包括一個  (ex:wd)
2.輸出兩個w以上的字,包括兩個  (ex:wwwwd , ex:wwd)

‘w\{2\}’    :指定輸出w為兩個的字,包括兩個w

‘w\{2,6\}’  :指定輸出w為兩到六個的字,包括兩個或六個w

‘w\{2,\}’   :指定輸出w為兩個以上的字,包括兩個w

egrep

‘w+d’       :w+代表一個以上的w,包括一個w,
所以輸出可能為wd,wwd,wwwwwwd之類的

‘ww?d’      :沒有w或是一個w,ex:wd,wwd

‘word|wwwd’ :符合word或是wwwd都會被輸出

‘w(ab|xy)d’ :符合wabd或是wxyd,都會被輸出
——————————————————————————–
sed

cat -n /etc/passwd | sed ’40,$’d
cat -n /etc/passwd | sed ’40,$d’
一樣都是砍掉40~最後一列,但是並不是每個參數都可以放到單引號外面的

cat -n /etc/passwd | sed ‘/LUA/’d
將每列含有LUA的列砍掉,顯示不含有的

cat -n /etc/passwd | sed ‘/LUA/!d’
將不含有LUA的列砍掉,顯示含有的

cat -n /etc/passwd | sed ‘/root/p’
顯示含有root的列,會在含有符合root的列下面在插入相同一列
ex:第一列符合
1  root:x:0:0:root:/root:/bin/bash
2  bin:x:1:1:bin:/bin:/sbin/nologin
3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
.
.
.
所以他輸出顯示時會變成下面情況
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  bin:x:1:1:bin:/bin:/sbin/nologin
3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
.
.
.
cat -n /etc/passwd | sed -n ‘/root/p’
與上差別在於不會顯示不符合的列,且不會多產生相同列

cat -n /etc/passwd | sed ‘2,$d’ | sed ‘s/root/s54099/’
s 為取代的功能 將root取代為s54099
ex:
1  s54099:x:0:0:root:/root:/bin/bash

cat -n /etc/passwd | sed ‘2,$d’ | sed ‘s/root/s54099/g’
與上差別為,如果沒有加上g 只會取代含有符合字串那一列的一組字串
ex:
1  s54099:x:0:0:s54099:/s54099:/bin/bash

cat -n /etc/passwd | sed ‘2,$d’ | sed -n ‘/root/w /tmp/passwdTEST’
將下列那行,寫到/tmp/passwdTEST之中
1  s54099:x:0:0:root:/root:/bin/bash