1. 程式人生 > >linux命令,如何根據關鍵字查詢,如何替換某個關鍵字,vi中如何複製

linux命令,如何根據關鍵字查詢,如何替換某個關鍵字,vi中如何複製

如何根據關鍵字查詢

如果是在檔案的外面

grep -rl 關鍵字 目錄
例如:查詢/home下所有內容含有hello的檔案。grep -rl ‘hello’ /home
r:遞迴目錄與子目錄查詢
l:只列出檔案全名

如果是在沒有開啟檔案的前提就用"cat 檔名 | grep "關鍵字""

 

如果是用vi開啟檔案後,在命令列下輸入“: /關鍵字”    按n會跳到下一個 , 按N會跳到上一個

 

在用vi開啟檔案後,怎麼替換某個關鍵字

1. 基本替換
:s/str1/str2/ 替換當前行第一個str1為str2
:s/str1/str2/g 替換當前行所有str1為str2
:n,$s/str1/str2/ 替換第 n 行開始到最後一行中每一行的第一個str1為str2
:n,$s/str1/str2/g 替換第 n 行開始到最後一行中每一行所有str1為str2
(n 為數字,若 n 為 .,表示從當前行開始到最後一行)
:%s/str1/str2/(等同於 :g/str1/s//str2/) 替換每一行的第一個str1為str2
:%s/str1/str2/g(等同於 :g/str1/s//str2/g) 替換每一行中所有str1為str2
2. 可以使用 # 作為分隔符,此時中間出現的 / 不會作為分隔符
:s#str1/#str2/# 替換當前行第一個str1/ 為str2/

在VI的命令模式下輸入“:set nu”  完整的是  “:set number”

 

多檔案的關鍵字替換 ,三種方式

Mahuinan法:

sed -i "s/oldString/newString/g" `grep oldString -rl /path/*.txt`

Sumly法

執行命令:

perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt

上面的意思是說將www資料夾下所有的htm和txt檔案中的“China”都替換為“Sumly”

30T法

執行命令:

perl -pi -e 's|baidu|30T|g' `find /www -type f`

上面的意思是說將www資料夾下所有檔案,不分副檔名,所有的“baidu”都替換為“30T”

 

 

複製操作
  yy命令複製當前整行的內容到vi緩衝區
  yw複製當前游標所在位置到單詞尾字元的內容到vi快取區,相當於複製一個單詞
  y$複製游標所在位置到行尾內容到快取區
  y^複製游標所在位置到行首內容到快取區
  nyy例如:5yy就是複製5行
  nyw例如:2yw就是複製兩個單詞

  如果要複製第m行到第n行之間的內容,可以在末行模式中輸入m,ny例如:3,5y複製第三行到第五行內容到快取區。
 

貼上

p:在游標所在位置的後面插入複製的文字,p是paste的首字母。

P:在游標所在位置的前面插入複製的文字。

np:在游標所在位置的後面插入複製的文字,共複製n次。

nP:在游標所在位置的前面插入複製的文