Linux下常用命令介紹

Linux下sed,awk,grep,cut,find等常用命令介紹
http://www.itzhai.com/linux-sed-awk-grep-cut-find-frequently-used-commands-such-as-introduction.html###


Linux文件查找命令find,xargs
find命令的格式:
find pathname -options [-print -exec -ok ...]
find 命令的參數:

-perm

按照文件權限模式查找
讀權限:r:4 寫權限:w:2 執行權限:x:1
文件屬主具有讀、寫權限: rw:4+2=6
其他用戶具有讀權限:r:4


-type

查找的文件類型
-type f 文件
-type d 目錄
-type l 符號鏈接文件


-exec

-exec 參數後面跟的是 command命令
command命令的終止,使用 ';' (分號)來判定,在後面必須有一個 ';'
'{}',使用{}來表示文件名,也就是find前面處理過程中過濾出來的文件,用於command命令進行處理
對於不同的系統,直接使用分號可能會有不同的意義, 使用轉義符 '\'在分號前明確說明


xargs

find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。

sed
sed簡介:

sed 是一種在線編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操作;編寫轉換程序等。

sed腳本是一個sed的命令清單,啓動Sed時以-f選項引導腳本文件名。Sed對於腳本中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多個命令,要用分號分隔。以#開頭的行爲註釋行,且不能跨行。

關於sed的hold space(內存緩衝區)和pattern space(模式空間)

sed在處理文件的時候,每一行都需要存放在一個叫“模式空間”的臨時緩存區。每處理完一行,便清理一次(pattern space),並把下一行再次放入該臨時緩衝區。

而保留空間(hole space),是當sed用到h命令的時候,把匹配的模式放在一個叫做"hold buffer"的保留緩衝裏,但需要使用G(sed的取得命令)的時候,sed 從這個保留空間(hold space)中取得。

sed 是以行爲單位進行讀取,讀取後的內容存放在pattern space。

holding space是通過h,H,x,g,G命令和pattern space產生關連,利用這5個特性可以輔助pattern space解決問題。


g

表示行內全面替換,當前處理行進行全局替換。


G

獲得內存緩衝區的內容,並追加到當前模板塊文本的後面。
函數參數G 與g 唯一差別是, sed執行g 時, 數據蓋掉(overwrite) pattern space 內原來的數據
而G , 數據則是"添加(append)" 在pattern space 原來數據後。


‘;’號

如果在一行中有多個命令,要用分號隔開。


s/re/string

用string替換正則表達式re。


d

從模板塊(Pattern space)位置刪除行。

函數參數d 表示刪除數據行, 其指令格式如下:
[address1[ ,address2]] d

對上述格式有下面幾點說明:
函數參數d 最多與兩個地址參數配合。

sed執行刪除動作情況如下:
將pattern space 內符合地址參數的數據刪除。
將下一筆資料讀進pattern space 。
重新執行sedscript。
n

讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。

函數參數n 表示讀入下一行資料。
其指令格式如下:
[address1[ ,address2]] n
對上述格式有下面幾點說明:
函數參數n 最多配合兩個地址參數。

sed執行讀入下一行動作的情況如下:
輸出在pattern space 的數據。
將下一筆資料讀到pattern space。
執行下一個編輯指令。


-n, --quiet, --silent

安靜模式,取消默認輸出。


x

交換pattern和hold space


p

打印模式空間的行,通常 p 會與參數 sed -n 一起使用


N

追加下一行數據到模式空間,數據行間以換行字符(embedded newline character)分隔。

函數參數N 表示添加下一筆資料在pattern space 內。
其指令格式如下:
[address1 ,[address2]] N
對上述格式有下面幾點說明:
函數參數N 最多配合兩個地址參數。

sed執行時, 將下一行數據讀入並添加在pattern space 內, 數據行間以換行字符(embedded newline character)分隔。
此外, 在替換時, 換行字符可用\n 來match。


=

打印當前行號


.

匹配一個非換行符的字符


h

拷貝模板塊的內容到內存中的緩衝區。


!

表示後面的命令對所有沒有被選定的行發生作用。


$

錨定行的結束 如:/sed$/匹配所有以sed結尾的行。也可以表示文件最後一行。


1

表示文件第一行


-e

直接在指令列模式上進行 sed 的動作編輯,允許多臺編輯。


:label

表示建立一個標籤label


b

跳轉命令,這個命令是無條件跳轉
ba表示跳轉到標籤a處


q

退出Sed。


D

刪除模板塊的第一行。

函數參數D 與d 的比較如下:
當pattern space 內只有一數據行時, D 與d 作用相同。
當pattern space 內有多行資料行時D 表示只刪除pattern space 內第一行資料; d 則全刪除。
D 表示執行刪除後, pattern space 內不添加下一筆數據, 而將剩下的數據重新執行sedscript ; d 則讀入下一行後執行sedscript。

grep
grep簡介:

grep (global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴展,支持更多的re元字符, fgrep就是 fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符表示回其自身的字面意義,不再特殊。linux 使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。


-l

打印匹配模板的文件清單


-r

遞歸地搜索目錄。在缺省情況下,按照到目錄的鏈接。


^

錨定行的開始


[^]

匹配一個不在指定範圍內的字符


\w

匹配文字和數字字符,也就是[A-Za-z0-9]


x\{m,\}

重複字符x,至少m次,如:'o\{5,\}'匹配至少有5個o的行。
'\w\{3,\}'即是至少有4個字符的已登錄用戶


$

錨定行的結束 如:/sed$/匹配所有以sed結尾的行。

awk
關於awk:

awk是一種用於處理文本的編程語言工具。AWK 實用工具的語言在很多方面類似於 shell 編程語言,儘管 AWK 具有完全屬於其本身的語法。在最初創造 AWK 時,其目的是用於文本處理,並且這種語言的基礎是,只要在輸入數據中有模式匹配,就執行一系列指令。該實用工具掃描文件中的每一行,查找與命令行中所給定 內容相匹配的模式。如果發現匹配內容,則進行下一個編程步驟。如果找不到匹配內容,則繼續處理下一行。

awk命令的語法

awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在數據中查找的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號 ({}) 不需要在程序中始終出現,但它們用於根據特定的模式對一系列指令進行分組。

$0,關於awk的字段

實用工具將每個輸入行分爲記錄和字段。記錄是單行的輸入,而每條記錄包含若干字段。默認的字段分隔符是空格或製表符,而記錄的分隔符是換行。雖然在默認情況下將製表符和空格都看作字段分隔符(多個空格仍然作爲一個分隔符),但是可以將分隔符從空格改爲任何其它字符。

當 AWK 讀取輸入內容時,整條記錄被分配給變量 $0。每個字段以字段分隔符分開,被分配給變量 $1、$2、$3 等等。一行在本質上可以包含無數個字段,通過字段號來訪問每個字段。

BEGIN和END

在awk 中兩個特別的表達式,BEGIN和END,這兩者都可用於pattern中,提供BEGIN和END的作用是給程序賦予初始狀態和在程序結束之後執行一些掃尾的工作。任何在BEGIN之後列出的操作(在{}內)將在awk開始掃描輸入之前執行,而END之後列出的操作將在掃描完全部的輸入之後執行。因此,通常使用BEGIN來顯示變量和預置(初始化)變量,使用END來輸出最終結果。

gsub(r,s,t)

在字符串t中用字符串s和正則表達式r匹配的所有字符串。返回值是替換的個數。如果沒有給出t,默認是$0。


NR

表示awk開始執行程序後所讀取的數據行數.


$0

表示當前處理的整行數據

Linux的cut命令
關於cut命令:

cut命令可以從一個文本文件或者文本流中提取文本列,具體的說就是在文件中負責剪切數據用的。cut是以每一行爲一個處理對象的,這種機制和sed是一樣的。

cut -d'分隔字元' -f fields

參數∶
-d ∶後面接分隔字元。與 -f 一起使用;
-f ∶依據 -d 的分隔字元將一段訊息分割成爲數段,用 -f 取出第幾段的意思;
-c ∶以字元 (characters) 的單位取出固定字元區間;

Linux的wc命令
關於WC命令:

該命令統計給定文件中的字節數、字數、行數。如果沒有給出文件名,則從標準輸入讀取。wc同時也給出所有指定文件的總統計數。字是由空格字符區分開的最大字符串。


該命令各選項含義如下:

wc -m filename:顯示一個文件的字符數
wc -l filename:顯示一個文件的行數
wc -L filename:顯示一個文件中的最長行的長度
wc -w filename:顯示一個文件的字數

關於ls命令

ls 命令經常要使用,通過使用 ls 命令可以查看linux文件夾包含的文件,查看文件權限(包括目錄、文件夾、文件權限),查看目錄信息等等,ls 命令在平常的linux操作中使用很頻繁,所以這裏介紹下 ls 命令的相關使用方法。


選項說明:

-a 用於顯示所有文件和子目錄(保羅點文件)。
-l 除了文件名之外,還將文件的權限、所有者、文件大小等信息詳細列出來。
-r 將目錄的內容清單以英文字母順序的逆序顯示。
-t 按文件修改時間進行排序,而不是按文件名進行排序。

關於sort命令

Sort命令的功能是對文件中的各行進行排序。Sort命令有許多非常實用的選項,這些選項最初是用來對數據庫格式的文件內容進行各種排序操作的。實際上,Sort命令可以被認爲是一個非常強大的數據管理工具,用來管理內容類似數據庫記錄的文件。
-n按照數字方式排序。不加-n參數時排序結果根據最左面的數字開始,等同於字母的比較方式。按算術值對數字字段排序。數字字段可包含前導空格、可選減號、十進制數字、千分位分隔符和可選基數符。對包含任何非數字字符的字段進行數字排序會出現無法預知的結果。

-r 顛倒指定排序的順序。
-k作用是根據某個列來排序,默認是第1列(從1開始)。
-t表示分割符,以:分割,默認情況下以空格分割
-nrk 5即是按照數字方式倒序排序,根據文件屬性的第5列即是文件大小排序

關於tr命令

通過使用 tr,可以非常容易地實現 sed 的許多最基本功能。可以將 tr 看作爲 sed 的(極其)簡化的變體。使用tr命令可以用一個字符來替換另一個字符,或者可以完全除去一些字符,也可以用它來除去重複字符。

tr的命令格式爲:

tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file


-c

用字符串1中字符集的補集替換此字符集,要求字符集爲ASCII。


-d

刪除字符串1中所有輸入字符。


-s

刪除所有重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串。


string1_to_translate_from

要轉換的原字符串


string2_to_translate_to

想要轉換成的字符串

關於mv命令

mv命令來爲文件或目錄改名或將文件由一個目錄移入另一個目錄中。該命令等同於DOS系統下的ren和move命令的組合。它的使用權限是所有用戶。

mv [options] 源文件或目錄 目標文件或目錄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章