Linux shell command學習筆記(二)

  • <cut>

  做用:從輸入文件或者命令的輸出中析取出各類域linux

  用法:cut –c{字符串範圍} –d{字段間分割符} –f{字段索引編號}shell

  舉例:vim

  (1)查看在線用戶:who | cut –c1-8安全

  (2)從系統文件/etc/passwd中獲取用戶名列表:cut –d: -f1 /etc/passwdide

[dannchen@sqaauto3 ~]$ ls
D4C  Desktop  Documents  Downloads  Music  Pictures  process  process1  process2  Public  Templates  Videos
[dannchen@sqaauto3 ~]$ ls | cut -c1-5
D4C
Deskt
Docum
Downl
Music
Pictu
proce
proce
proce
Publi
Templ
Video
  • <paste>

  做用:將多個域合併函數

  用法:paste –d{字段間分割符}spa

  舉例:code

  paste –d’:’ filename1 filename2blog

[dannchen@sqaauto3 D4C]$ cat 2.c
just for test!
[dannchen@sqaauto3 D4C]$ cat 1.c
#include <stdio.h>
int main(){
        printf("hello world!\n");
        return 0;
}
[dannchen@sqaauto3 D4C]$ paste -d':' 1.c 2.c
#include <stdio.h>:just for test!
int main(){:
        printf("hello world!\n");:
        return 0;:
}:
  • <sort>

  做用:排序排序

  用法:

  -t 指定分隔符, 默認爲空格

  -r 以降序來排列

  -u 去掉重複行

  -d 以字典序來排列,包括字母,數字,符號等

  -n 以數字序來排列

  +positon1 -positon2 從第position1 字段到position2字段,包括position1,不包括position2。positon1從0開始。

  -k KeyDefinition 指定排序關鍵字。KeyDefinition 選項的格式爲:

  [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

  排序關鍵字包括任何以 FStart 變量指定的字段和 CStart 變量指定的列開頭的字符及以 FEnd 變量指定的字段和

  CEnd 變量指定的列結束的字符。Modifier 變量的值可以是 b、d、f、i、n 或 r。修飾符和同一字母的標誌等價。

  舉例:

  (1)          對/etc/passwd 文件的第三項進行排序(userid): sort -t: -k 3n /etc/passwd

  (2)          基於ip地址對/etc/hosts文件排序: sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

  • <uniq>

  做用:對數據進行去重

  用法:先要對數據進行排序,而後再去重

  -d:輸出重複行

  -c:對數據進行計數

  舉例:

  找出/etc/passwd文件中的重複用戶名:sort /etc/passwd | cut –f1 –d: | uniq –d

  • <sed>

  做用:編輯數據

  用法:

  sed command file

  -n選項:指定行號或者行號範圍,若是未指定,表示任意一行;用p表示打印

  舉例:

  sed –n ‘-1,2p’ file.txt #顯示前兩行

  sed –n ‘/UNIX/p’ filename #顯示包含「UNIX「的行

  d命令:刪除數據

  舉例:

  sed ‘1,2d’ intro #刪掉前兩行

  sed ‘/UNIX/d’ intro #刪掉包含「UNIX「的行

  s命令:替換

  舉例

  Sed ‘s/Unix/UNIX/g’ intro > temp #將文件intro中「Unix「替換爲UNIX, 並將結果保存到temp文件中

  • <vi>

  (1) 光標移動

  nG:光標移至第n行首

  n+:光標下移n行

  n-:光標上移n行

  n$:光標移至第n行尾

  (2) 刪除命令

  do:刪至行首

  d$:刪至行尾

  ndd:刪除當前行及其後n-1行

  :n1,n2 d:將n1行到n2行之間的內容刪除

  (3) 搜索替換

  /pattern:從光標開始處向文件尾搜索pattern

  ?pattern:從光標開始處向文件首搜索pattern

  :s/p1/p2/g:將當前行中全部p1均用p2替代

  :n1,n2s/p1/p2/g:將第n1至n2行中全部p1均用p2替代

  :g/p1/s//p2/g:將文件中全部p1均用p2替換

  (4) 複製粘貼

  yy:複製當前行,將光標移動到某一行,p粘貼

  n1,n2 co n3:n1爲起始行,n2爲結束行,n3爲粘貼行(其中,co是copy的簡稱,也能夠直接用copy代替)

  (5) 文件保存與退出

  :w :保存當前文件

  :x :保存當前文件並退出

  :q!:不保存文件並退出vi

  (6) 多個文件之間的複製粘貼

  先在開始處作標誌mk (注:m是作標註的命令,語法是m[字母],[字母]爲該行的標註)

  而後在末尾用」ay k (光標自動回到開始處,此時已經把你的內容放到緩衝區了)

  其中a表示緩衝區a

  而後用ex轉義到你的文件B中,而後用」ap命令粘貼就行

  即:vi 1.txt 2.txt mk「ay kex 2.txt 」ap

  (7)  vi切分窗口

  :split two.c:打開另外一個窗口並用該窗口編輯另外一個指定的文件

  :vsplit:垂直分割窗口

  CTRL-W:跳轉窗口

  (8) 比較兩個文件的不一樣之處

  vimdiff 1.txt 2.txt

  • <diff><patch>

  (1) diff命令

  功能是用來比較兩個文件的不一樣,而後記錄下來,也就是所謂的 diff 補丁

  選項

  -r 是一個遞歸選項

  -u 選項以統一格式建立補丁文件,這種格式比缺省格式更緊湊些。

  (2) patch命令

  patch 就是利用 diff 製做的補丁來實現源文件(夾) 和目的文件(夾) 的轉換。

  選項:

  -p0 選項要從當前目錄查找目的文件(夾)

  -p1 選項 要忽略掉第一層目錄,從當前目錄開始查找。

  -E 選項說明若是發現了空文件,那麼就刪除它

  -R 選項說明在補丁文件中的 「 新 」 文件和 「 舊 」 文件如今要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)

  舉例:

  單個文件:

  diff –uN from-file to-file >to-file.patch

  patch –p0 < to-file.patch

  patch –RE –p0 < to-file.patch

  多個文件:

  diff –uNr from-docu to-docu >to-docu.patch

  patch –p1 < to-docu.patch

  patch –R –p1 <to-docu.patch

  • <find>

  find pathname -options [-print -exec -ok ...]

  (1) 含義解釋

  pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。

  -print: find命令將匹配的文件輸出到標準輸出。

  -exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式爲’command’ { } \;,注意{ }和\;之間的空格。

  -ok: 和-exec的做用相同,只不過以一種更爲安全的模式來執行該參數所給出的shell命令,在執行每個命令以前,都會給出提示,讓用戶來肯定是否執行。

  (2) 選項

  -name:按照文件名查找文件

  -mtime -n +n:按照文件的更改時間來查找文件, – n表示文件更改時間距如今n天之內,+ n表示文件更改時間距如今n天之前

  -newer file1 ! file2:查找更改時間比文件file1新但比文件file2舊的文件

  -type:查找某一類型的文件,諸如:b – 塊設備文件,d – 目錄,c – 字符設備文件,p – 管道文件,l – 符號連接文件,f – 普通文件

  -depth:在查找文件時,首先查找當前目錄中的文件,而後再在其子目錄中查找

  (3) xargs

  find命令的-exec選項處理匹配到的文件時, find命令將全部匹配到的文件一塊兒傳遞給exec執行。但有些系統對可以傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘以後,就會出現溢出錯誤。錯誤信息一般是「參數列太長」或「參數列溢出」。這就是xargs命令的用處所在,特別是與find命令一塊兒使用.

  (4) 舉例

  用ls -l命令列出所匹配到的文件,能夠把ls -l命令放在find命令的-exec選項中

  find . -type f -exec ls -l { } \;

  查找系統中全部文件長度爲0的普通文件,並列出它們的完整路徑;

  find / -type f -size 0 -exec ls -l { } \;

  用grep命令在全部的普通文件中搜索hostname這個詞:

  find . -type f -print | xargs grep 「hostname」

  • 數學計算

  (1) expr

  expr可用於計算各類表達式的值,可包含字符串,邏輯運算和函數(但沒有指數或者對數函數)。

  加法:answer=`expr $c + $d`

  減法:answer=`expr $c – $d`

  乘法:answer=`expr $c \* $d`

  減法:answer=`expr $c / $d`

  (2) shell內部運算

  shell自身可進行數學計算,使用shell內部函數的好處是,不用調用外部程序,從而減小外部內存使用量。

  加法:answer=$(($c + $d))

  減法:answer=$(($c – $d))

  乘法:answer=$(($c * $d))

  減法:answer=$(($c / $d))

  (3) bc計算器

  前面兩種數學計算方法均是集中在整數計算上,而bc是一個實現任意精度的計算器,可經過設置scale(小數點後十進制位數),達到想要的精確度的結果。

  加法:answer=`echo 「$c + $d」|bc`

  減法:answer=`echo 「$c – $d」|bc`

  乘法:answer=`echo 「$c * $d」|bc`

  減法:answer=`echo 「$c / $d」|bc`

  使用scale設置精度:

  answer=`echo 「scale=5;$c * $d」|bc`

  若想使用三角函數,須要用-l選項激活bc,啓動數學函數庫:

  answer=`echo 「scale=5; c($d)」|bc -l`

 

參考:

http://dongxicheng.org/script/linux-shell/

相關文章
相關標籤/搜索