一、greplinux
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
正則表達式
語法:shell
grep [options] 'pattern' input_file ...express
[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大 小寫(只適用於單字符)。
-h:查詢多文件時不顯示文件名。
-l:查詢多文件時只輸出包含匹配字符的文件名。
-n:顯示匹配行及 行號。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的全部行。編程
pattern正則表達式主要參數:
\: 忽略正則表達式中特殊字符的原有含義。
^:匹配正則表達式的開始行。
$: 匹配正則表達式的結束行。
\<:從匹配正則表達 式的行開始。
\>:到匹配正則表達式的行結束。
[ ]:單個字符,如[A]即A符合要求 。
[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。:全部的單個字符。
* :有字符,長度能夠爲0。vim
二、sed數組
sed是一種流編輯器,它是文本處理中很是中的工具,可以完美的配合正則表達式使用,功能不一樣凡響。處理時,把當前處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並無 改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件;簡化對文件的反覆操做;編寫轉換程序等。 編程語言
sed :Stream EDitor編輯器
行編輯器(全屏編輯器:vim)ide
sed:模式空間
默認不編輯源文件,僅對模式空間中的數據作處理;然後,處理結束後,將模式空間打印至屏幕;
sed用法:
sed [options] 'AddressCommand' file ...
options經常使用參數:
-n:靜默模式,不在默認顯示模式空間中的內容
-i:直接修改原文件
-e SCRIPT -e SCRIPT:能夠同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
用法:sed -f /path/to/script file
Address:
一、StartLine,Endline
好比1,100
$:最後一行
二、/RegExp/
/^root/
三、/pattern1/,/patteern2/
第一次被pattern1匹配到的行開始,至第一次被pattern2匹配到的行結束,這中間的全部行
四、LineNumber
指定的行
五、StartLine,+N
從startLine開始,向後的N行;
Command:
d:刪除符合條件的行;
p:顯示符合條件的行;
a \string:在指定的行後面追加新行,內容爲string
\n:能夠用於換行
i \string:在指定的行前面添加新行,內容爲string
r filename:將指定的文件的內容添加至符合條件的行處
w filename:將地址指定的範圍內的行另存至指定的文件中;
s/pattern(可使用正則表達式的字符,而string不能夠)/string/修飾符:查找並替換,默認替換每行中第一次被模式匹配到的字符串
加修飾符:
g:全局替換
i:忽略字符大小寫
s///,s###,s@@@,s::: sed可採用任意字符做爲定界符
\(..\),\1,\2 \(..\)用於匹配字符串,匹配到的第一個字符串則爲\1,以此類推爲\2
sed練習:
一、刪除/etc/grub.conf文件中行首的空白符;
sed -r 's#^[[:space:]]+##g' /etc/grub.conf
二、替換/etc/inittab文件中「id:3:initdefault:」一行中的數字爲5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\1\5\2@g' /etc/inittab
三、刪除/etc/inittab文件中的空白行;
sed '/^$/d' /etc/inittab
四、刪除/etc/inittab文件中開頭的#號;
sed 's/^#//g' /etc/inittab
五、刪除某文件中開頭的#號及後面的空白,但要求#號後面必須有空白字符;
sed 's/^#[[:space:]]+//g' sed.txt
六、刪除某文件以空白符後面跟#類的行中的靠頭的空白字符及#;
sed 's/^[[:space:]]+#//g' sed.txt
七、去除一個文件路徑的目錄名稱。
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
三、awk
awk是一種編程語言,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入(stdin)、一個或多個文件,或其它命令的輸出。它支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。它在命令行中使用,但更可能是做爲腳原本使用。awk有不少內建的功能,好比數組、函數等,這是它和C語言的相同之處,靈活性是awk最大的優點。
語法:awk 'PATTERN[ACTION]' file
print $1
-F
# awk [options] 'script' file1 file2, ...
# awk [options] 'PATTERN' { action }' file1 file2, ...
awk的輸出:
1、print
print的使用格式:
print item1,item2,...
要點:
一、各項目之間使用逗號隔開,而輸出時則以空白字符分割;
二、輸出的item能夠爲字符串或數值、當前記錄的字段(如$1)、變量或awk的表達式;數值會先轉換爲字符串,然後再輸出;
三、print命令後面的item能夠省略,此時其功能至關於print $0,所以,若是想輸出空白行,則須要使用pring "";
例子:
# awk 'BEGIN { print "line one\nline two\nline three" }'
awk -F: '{ print $1,$3 }' /etc/passwd
2、awk變量
2.1 awk內置變量之記錄變量
FS:field separator,讀取文本時,所使用字段分隔符;
RS:Record separator,輸入文本信息所用的換行符;
OFS:Output Filed Separator
ORS:Output Row Separator
2.2 awk內置變量之數據變量
NR: The number of input records,awk命令所處理的記錄數;若是有多個文件,這個數目會把處理的多個文件中行統一計數;
NF:Number of Field,當前記錄的field個數;
FNR: 與NR不一樣的是,FNR用於記錄正處理的行是當前這一文件中被總共處理的行數;
ARGV: 數組,保存命令行自己這個字符串,如awk '{print $0}' a.txt b.txt這個命令中,ARGV[0]保存awk,ARGV[1]保存a.txt;
ARGC: awk命令的參數的個數;
FILENAME: awk命令所處理的文件的名稱;
ENVIRON:當前shell環境變量及其值的關聯數組;
如:awk 'BEGIN{print ENVIRON["PATH"]}'
3、printf
printf命令的使用格式:
printf format, item1, item2, ...
要點:
一、其與print命令的最大不一樣是,printf須要指定format;
二、format用於指定後面的每一個item的輸出格式;
三、printf語句不會自動打印換行符;\n
format格式的指示符都以%開頭,後跟一個字符;以下:
%c: 顯示字符的ASCII碼;
%d, %i:十進制整數;
%e, %E:科學計數法顯示數值;
%f: 顯示浮點數;
%g, %G: 以科學計數法的格式或浮點數的格式顯示數值;
%s: 顯示字符串;
%u: 無符號整數;
%%: 顯示%自身;
修飾符:
N: 顯示寬度;
-: 左對齊;
+:顯示數值符號;
例子:
# awk -F: '{printf "%-15s %i\n",$1,$3}' /etc/passwd
4、輸出重定向
print items > output-file
print items >> output-file
print items | command
特殊文件描述符:
/dev/stdin:標準輸入
/dev/sdtout: 標準輸出
/dev/stderr: 錯誤輸出
/dev/fd/N: 某特定文件描述符,如/dev/stdin就至關於/dev/fd/0;
例子:
# awk -F: '{printf "%-15s %i\n",$1,$3 > "/dev/stderr" }' /etc/passwd
五 awk的模式:
awk 'program' input-file1 input-file2 ...
其中的program爲:
pattern { action }
pattern { action }
...
5.1 常見的模式類型:
一、Regexp: 正則表達式,格式爲/regular expression/
二、expresssion: 表達式,其值非0或爲非空字符時知足條件,如:$1 ~ /foo/ 或 $1 == "magedu",用運算符~(匹配)和!~(不匹配)。
三、Ranges: 指定的匹配範圍,格式爲pat1,pat2
四、BEGIN/END:特殊模式,僅在awk命令執行前運行一次或結束前運行一次
五、Empty(空模式):匹配任意輸入行;
模式匹配表達式:
模式,模式:指定一個行的範圍。該語法不能包括BEGIN和END模式。
BEGIN:讓用戶指定在第一條輸入記錄被處理以前所發生的動做,一般可在這裏設置全局變量。
END:讓用戶在最後一條輸入記錄被讀取以後發生的動做。