grep
grep的基本用法
grep命令是支持正則表達(dá)式的一個多用途文本搜索工具脆烟,一般格式為
grep 選項 模式 文件
選項 | 意義 |
---|---|
-c | 只輸出匹配行的數(shù)量 |
-i | 搜索時忽略大小寫 |
-h | 查詢多文件時不顯示文件名 |
-l | 只列出符合匹配的文件名,而不列出具體的匹配行 |
-n | 列出所有的匹配行房待,并顯示行號 |
-s | 不顯示不存在或無匹配文本的錯誤信息 |
-v | 顯示不包含匹配文本的所有行 |
-w | 匹配整詞 |
-x | 匹配正行 |
-r | 遞歸搜索邢羔,不僅搜索當(dāng)前目錄,而且搜索子目錄 |
-q | 禁止輸出任何結(jié)果桑孩,以退出狀態(tài)表示搜索是否成功 |
-b | 打印匹配行距文件頭部的偏移量拜鹤,以字節(jié)為單位 |
-o | 與-b選項結(jié)合使用,打印匹配的詞距文件頭部的偏移量流椒,以字節(jié)為單位 |
-E | 支持?jǐn)U展的正則表達(dá)式 |
-F | 不支持正則表達(dá)式敏簿,按照字符串的字面意思進行匹配 |
grep命令的模式十分靈活,可以是字符串,也可以是變量惯裕,還可以是正則表達(dá)式温数。注意,無論模式是何種形式轻猖,只要模式中包含空格帆吻,就需要使用雙引號將模式引起來。
grep與正則表達(dá)式
- 匹配行首咙边,用元字符
^
設(shè)置大小寫猜煮,用
-i
匹配重復(fù)字符,用
.
,*
轉(zhuǎn)義符败许,用
\
-
POSIX字符類
類名 意義 [:upper:] 表示大寫字母[A~Z] [:lower:] 表示小寫字母[a~z] [:digit:] 表示阿拉伯?dāng)?shù)字[0~9] [:alnum:] 表示大小寫字母和阿拉伯?dāng)?shù)字 [:space:] 表示空格鍵和TAB鍵 [:alpha:] 表示大小寫字母 [:cntrl:] 表示Ctrl [:graph:]或[:print:] 表示ASCII碼 [:xdigit:] 表示16進制數(shù)字[09AFa~f] 精確匹配:用
\<\>
或字符王带,grep需要加上-E選項才能支持它,用
|
表示
grep命令族
grep: 標(biāo)準(zhǔn)grep命令
egrep: 擴展grep命令,支持基本和拓展正則表達(dá)式
fgrep: 快速grep命令市殷,不支持正則表達(dá)式
sed命令
sed是一個非交互式文本編輯器愕撰,它可對文本文件和標(biāo)準(zhǔn)輸入進行編輯,標(biāo)準(zhǔn)輸入可以是來自鍵盤輸入醋寝、文件重定向搞挣、字符串、變量音羞,甚至來自管道的文本囱桨。sed適用于以下三中場合:
- 編輯相對交互式文本編輯器而言太大的文件。
- 編輯命令太復(fù)雜嗅绰,在交互式文本編輯器中難以輸入的情況舍肠。
- 對文件掃描一遍,但是需要執(zhí)行多個編輯函數(shù)的情況窘面。
基本用法
sed
只是對緩沖區(qū)中原始文件的副本進行編輯翠语,并不編輯原始文件。如果需要保存文件改動的內(nèi)容财边,需要將輸出重定向到另一個文件肌括。
調(diào)用sed
有三種方式,一種為Shell命令行方式酣难,另外兩種是將sed
命令寫入腳本文件们童,然后執(zhí)行該腳本文件。
- 在Shell命令行輸入命令調(diào)用
sed
鲸鹦,格式為sed [選項] 'sed命令' 輸入文件
慧库。 - 將
sed
命令插入腳本文件后,然后通過sed
命令調(diào)用它馋嗜,格式為sed [選項] -f sed 腳本文件 輸入文件
齐板。 - 將
sed
命令插入腳本文件后,最常用的方法是設(shè)置該腳本文件為可以執(zhí)行,然后直接執(zhí)行該腳本文件甘磨,格式為./sed腳本文件 輸入文件
第三種方式腳本文件需要以sha-bang(#!)
符號開頭橡羞。無論哪種方式,如果沒有指定輸入文件济舆,sed
將從標(biāo)準(zhǔn)輸入接收輸入卿泽。常用選項有三個
選項 | 意義 |
---|---|
-n | 不打印所有的行到標(biāo)準(zhǔn)輸出 |
-e | 表示將下一個字符串解析為sed編輯命令,如果只傳遞一個滋觉,可以省略 |
-f | 表示正在調(diào)用sed腳本文件 |
sed
命令主要由定位文本行和sed
編輯命令兩部分組成签夭,有兩種方式定位文本:
- 使用行號,指定一行椎侠,或者指定行號范圍
- 用正則表達(dá)式
選項 | 意義 |
---|---|
x | x為指定行號 |
x,y | 指定從x到y(tǒng)的行號范圍 |
/pattern/ | 查詢包含模式的行 |
/pattern/pattern/ | 查詢包含兩個模式的行 |
/pattern/,x | 從pattern匹配行到x號行 |
x,/pattern/ | 上一條反過來 |
x,y! | 查詢不包括x和y行號的行 |
編輯命令
選項 | 意義 |
---|---|
p | 打印匹配行 |
= | 打印文件行號 |
a\ | 在定位行號后追加文本信息 |
i\ | 在定位行號之前插入文本信息 |
d | 刪除定位行 |
c\ | 用新文本替代定位文本 |
s | 使用替換模式替換相應(yīng)模式 |
r | 從另一個文件中讀文本 |
w | 將文本寫入到一個文件 |
y | 變換字符 |
q | 第一個模式匹配后退出 |
l | 顯示與八進制ASCII碼等價的控制字符 |
{} | 在定位行執(zhí)行的命令組 |
n | 讀取下一個輸入行第租,用下一個命令處理新的行 |
h | 將模式緩沖區(qū)的文本復(fù)制到保持緩沖區(qū) |
H | ...追加到保持緩沖區(qū) |
x | 互換模式緩沖區(qū)和保持緩沖區(qū)內(nèi)容 |
g | 將保持模式緩沖區(qū)的內(nèi)容復(fù)制到模式緩沖區(qū) |
G | ....追加到模式緩沖區(qū) |
示例
測試文件內(nèi)容:
This is a Certificate Request file:
It should be mailed to zawu@seu.edu.cn
=====================================================
Certificate Subject:
/O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus
The above string is known as your user certificate subject, and t uniquely identifies theis user. $88
To install this user certificate, please save this e-mail message into the following file.
/home/alloy/linuxshell/CH02/usercert.pem
sed -n
: 不打印sed編輯對象的全部內(nèi)容
wsx@wsx-ubuntu:~/桌面$ sed -n '1p' input
This is a Certificate Request file:
wsx@wsx-ubuntu:~/桌面$ sed '1p' input
This is a Certificate Request file:
This is a Certificate Request file:
It should be mailed to zawu@seu.edu.cn
=====================================================
Certificate Subject:
/O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus
The above string is known as your user certificate subject, and t uniquely identifies theis user. $88
To install this user certificate, please save this e-mail message into the following file.
/home/alloy/linuxshell/CH02/usercert.pem
利用sed命令打印范圍行:
wsx@wsx-ubuntu:~/桌面$ sed -n '3,6p' input
It should be mailed to zawu@seu.edu.cn
=====================================================
Certificate Subject:
sed -e
: sed傳遞多個編輯命令時使用
wsx@wsx-ubuntu:~/桌面$ sed -n '/Certificate/=' input
1
6
wsx@wsx-ubuntu:~/桌面$ sed -n -e '/Certificate/p' input -e '/Certificate/=' input
This is a Certificate Request file:
1
Certificate Subject:
6
sed -f
:調(diào)用sed腳本文件時才起作用
wsx@wsx-ubuntu:~/桌面$ sed '/file:/a\We append a new line.' input
This is a Certificate Request file:
We append a new line.
It should be mailed to zawu@seu.edu.cn
=====================================================
Certificate Subject:
/O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus
The above string is known as your user certificate subject, and t uniquely identifies theis user. $88
To install this user certificate, please save this e-mail message into the following file.
/home/alloy/linuxshell/CH02/usercert.pem
腳本用法:
#! /bin/sed -f
/file:/a\ #a\表示在此處添加文本
# 添加文本
We append a new line.\
We append a another line.
sed基本編輯命令可以放在單引號內(nèi),也可放在單引號外我纪。
sed文本定位的一組例子
-
匹配元字符慎宾,用轉(zhuǎn)義符
\
進行屏蔽wsx@wsx-ubuntu:~/桌面$ sed -n '/\./p' input It should be mailed to zawu@seu.edu.cn /O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certificate subject, and t uniquely identifies theis user. $88 To install this user certificate, please save this e-mail message into the following file. /home/alloy/linuxshell/CH02/usercert.pem
-
使用元字符進行匹配
$
在sed命令中表示最后一行wsx@wsx-ubuntu:~/桌面$ sed -n '$p' input /home/alloy/linuxshell/CH02/usercert.pem
-
!
符號,打印不在2-10的行wsx@wsx-ubuntu:~/桌面$ sed -n '2,10!p' input This is a Certificate Request file: To install this user certificate, please save this e-mail message into the following file. /home/alloy/linuxshell/CH02/usercert.pem
-
使用行號和關(guān)鍵字匹配限定行范圍
wsx@wsx-ubuntu:~/桌面$ sed -n '/seugrid/,$p' input /O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certificate subject, and t uniquely identifies theis user. $88 To install this user certificate, please save this e-mail message into the following file. /home/alloy/linuxshell/CH02/usercert.pem
sed基本編輯命令的一組例子
-
插入文本:運行腳本浅悉,以輸入文件名作為參數(shù)
#!/bin/sed -f /file:/i\ # i\表示此處換行插入文本 We insert a new line.
-
修改文本
#!/bin/sed -f /file:/c\ #c\表示此處換行修改文本 We modify this line #修改文本內(nèi)容
-
刪除文本趟据,符號是
d
,不帶\
术健,與其他命令有所區(qū)別汹碱,非常靈活。下面刪除第一行和最后一行苛坚。wsx@wsx-ubuntu:~/桌面$ sed '1d' input It should be mailed to zawu@seu.edu.cn ===================================================== Certificate Subject: /O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certificate subject, and t uniquely identifies theis user. $88 To install this user certificate, please save this e-mail message into the following file. /home/alloy/linuxshell/CH02/usercert.pem wsx@wsx-ubuntu:~/桌面$ sed '$d' input This is a Certificate Request file: It should be mailed to zawu@seu.edu.cn ===================================================== Certificate Subject: /O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certificate subject, and t uniquely identifies theis user. $88 To install this user certificate, please save this e-mail message into the following file.
-
替換文本比被,格式
s/被替換的字符串/新字符串/[替換選項]
選項 意義 g 全局匹配替換(替換所有的) p 與-n選項結(jié)合色难,只打印替換行 w 文件名 表示將輸出定向到一個文件 sx@wsx-ubuntu:~/桌面$ sed 's/Certificate/CERTIFICATE/' input This is a CERTIFICATE Request file: It should be mailed to zawu@seu.edu.cn ===================================================== CERTIFICATE Subject: /O=Grid/OU=GlobusTest/OU=simpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certificate subject, and t uniquely identifies theis user. $88 To install this user certificate, please save this e-mail message into the following file. /home/alloy/linuxshell/CH02/usercert.pem wsx@wsx-ubuntu:~/桌面$ sed -n 's/Certificate/CERTIFICATE/p' input This is a CERTIFICATE Request file: CERTIFICATE Subject:
-
寫入到一個新文件
wsx@wsx-ubuntu:~/桌面$ sed -n 's/Certificate/CERTIFICATE/pg' input This is a CERTIFICATE Request file: CERTIFICATE Subject: wsx@wsx-ubuntu:~/桌面$ wsx@wsx-ubuntu:~/桌面$ sed -n '1,5 w output' input wsx@wsx-ubuntu:~/桌面$ cat output This is a Certificate Request file: It should be mailed to zawu@seu.edu.cn =====================================================
從文件中可讀入文本泼舱,格式
指定地址 r 文件名
。退出命令:
q
-
變換命令:sed命令的
y
表示字符變換(不等長時會報錯)wsx@wsx-ubuntu:~/桌面$ sed 'y/fmj/FMJ/' input This is a CertiFicate Request File: It should be Mailed to zawu@seu.edu.cn ===================================================== CertiFicate SubJect: /O=Grid/OU=GlobusTest/OU=siMpleCA-seugridl.seu.edu.cn/OU=seu.edu.cn/CN=globus The above string is known as your user certiFicate subJect, and t uniquely identiFies theis user. $88 To install this user certiFicate, please save this e-Mail Message into the Following File. /hoMe/alloy/linuxshell/CH02/usercert.peM
顯示控制字符:控制字符就是非打印字符枷莉,如退格鍵娇昙、F1鍵等。使用
sed l
命令笤妙。-
在命令行執(zhí)行命令組冒掌,用
{}
符號,與-e
選項功能類似蹲盘。wsx@wsx-ubuntu:~/桌面$ sed -n '/Certificate/{p;=}' input This is a Certificate Request file: 1 Certificate Subject: 6
awk編程
awk是三位前輩開發(fā)的編程語言股毫,awk是三位創(chuàng)建者的首字母≌傧危基本語言與C類似铃诬。
目前,使用的是gawk,Linux系統(tǒng)中/bin目錄下有awk
和gawk
兩個命令趣席,前者實際上是后者的鏈接兵志。利用gawk
語言可以實現(xiàn)數(shù)據(jù)查找、抽取文件中的數(shù)據(jù)宣肚、創(chuàng)建管道流命令等功能想罕。
我們可以簡單地將awk
編程模型分位三個階段:
- 讀輸入文件執(zhí)行的執(zhí)行代碼段(由BEGIN關(guān)鍵字標(biāo)識)
- 讀取輸入文件時執(zhí)行代碼段
- 讀輸入文件之后的執(zhí)行代碼段(由END關(guān)鍵字標(biāo)識)
調(diào)用方法分為兩種:Sehll命令行方式;腳本執(zhí)行霉涨。
awk模式匹配
任何awk語句都由模式和動作組成按价。模式是一組用于測試輸入行是否需要執(zhí)行動作的規(guī)則,動作是包含語句嵌纲、函數(shù)和表達(dá)式的執(zhí)行過程俘枫。awk
支持所有的正則表達(dá)式元字符,以及?
和+
兩個擴展元字符逮走。
wsx@wsx-ubuntu:~/桌面$ awk '/^$/{print "This is a blank line."}' input
This is a blank line.
This is a blank line.
This is a blank line.
This is a blank line.
This is a blank line.
單引號中間為awk命令鸠蚪,由兩部分組成,以“/”符號分隔师溅,^$
是模式茅信,花括號部分是動作。該awk表示一旦讀入的輸入文件是空行墓臭,就打印后面的字符串This is a blank line
蘸鲸。
使用腳本(將命令輸入一個文件中):
wsx@wsx-ubuntu:~/桌面$ awk -f src.awk input
This is a blank line.
This is a blank line.
This is a blank line.
This is a blank line.
This is a blank line.
內(nèi)容不止這些,我們先談?wù)勂渌拍睢?/p>
記錄和域
awk認(rèn)為輸入文件是結(jié)構(gòu)化的窿锉,awk將每個輸入文件行定義為記錄酌摇,行中的每一個字符串定義為域,域之間用空格嗡载、TAB鍵或其他符號進行分隔窑多,分隔域的符號就叫分隔符。(這個結(jié)構(gòu)化概念需要理解洼滚,很多命令和編程中都有涉及)
wsx@wsx-ubuntu:~/桌面$ awk '{print $2,$1,$4,$3}' sturecord
Hao Li 025------------ njue
Ju Zhang 025---------- nju
Bin Wang 025------ seu
wsx@wsx-ubuntu:~/桌面$ awk '{print $0}' sturecord
Li Hao njue 025------------
Zhang Ju nju 025----------
Wang Bin seu 025------
可以通過對域的操作對文本進行重新排列埂息,也可以用print $0
輸入所有域。
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {one=1;two=2}{print $(one+two)}' sturecord
njue
nju
seu
BEGIN
字段中定義one
和two
兩個變量并賦值遥巴。
-F
選項用來改變分隔符千康,例如只以'\t'為分隔符。
wsx@wsx-ubuntu:~/桌面$ awk -F'\t' '{print $2}' sturecord
025------------
025----------
025------
注意-F
與-f
的區(qū)別铲掐。
awk還提供了另一種更方便的方法改變分隔符拾弃。
wsx@wsx-ubuntu:~/桌面$ cat sturecord
Li Hao,njue,025------------
Zhang Ju,nju,025----------
Wang Bin,seu,025------
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=","}{print $1, $3}' sturecord
Li Hao 025------------
Zhang Ju 025----------
Wang Bin 025------
關(guān)系和布爾運算符
awk定義了一組關(guān)系運算符用于awk模式匹配。如下表
運算符 | 意義 |
---|---|
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
~ | 匹配正則表達(dá)式 |
!~ | 不匹配正則表達(dá)式 |
用/etc/passwd文件做個例子
# 第1域匹配root
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=":"} $1~/root/' /etc/passwd
# 全部域匹配root
root:x:0:0:root:/root:/bin/bash
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=":"} $0~/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
# 全部域不匹配nologin
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=":"} $0!~/nologin/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin
awk條件語句與C類似摆霉,有if語句,if/else語句以及if/else else語句三種豪椿。
下面是支持的布爾運算符
運算符 | 意義 |
---|---|
|| | 邏輯或 |
&& | 邏輯與 |
! | 邏輯非 |
# 多條件精確匹配
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=":"} {if($3==10||$4==10) print $0}' /etc/passwd
# 多條件模糊匹配
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
wsx@wsx-ubuntu:~/桌面$ awk 'BEGIN {FS=":"} {if($3~10||$4~10) print $0}' /etc/passwd
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:109:116::/nonexistent:/bin/false
avahi-autoipd:x:110:119:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
wsx:x:1000:1000:wsx,,,:/home/wsx:/bin/bash
nx:x:123:1001::/var/NX/nx:/etc/NX/nxserver
表達(dá)式
一個awk表達(dá)式可以由數(shù)值颠毙、字符常量、變量砂碉、操作符蛀蜜、函數(shù)和正則表達(dá)式自由組合而成。
運算符 | 意義 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
% | 模 |
^或** | 乘方 |
++x | 在返回x之前增蹭,x變量加1 |
x++ | 在返回x之后滴某,x變量加1 |
wsx@wsx-ubuntu:~/桌面$ awk '/^$/{print x+=1}' input
1
2
3
4
5
系統(tǒng)變量
awk定義了很多內(nèi)建變量用于設(shè)置環(huán)境信息,我們稱為系統(tǒng)變量滋迈。分為兩種:一種用于改變awk的默認(rèn)值霎奢,例如域分隔符;第二種用于定義系統(tǒng)值饼灿,在處理文本時可以讀取這些系統(tǒng)值幕侠。
變量名 | 意義 |
---|---|
$n | 當(dāng)前記錄的第n個域,域用FS分隔 |
$0 | 記錄的所有域 |
ARGC | 命令行參數(shù)的數(shù)量 |
ARGIND | 命令行中當(dāng)前文件的位置(從0開始標(biāo)號) |
ARGV | 命令行參數(shù)的數(shù)組 |
CONVFMT | 數(shù)字轉(zhuǎn)換格式 |
ENVIRON | 環(huán)境變量關(guān)聯(lián)數(shù)組 |
ERRNO | 最后一個系統(tǒng)錯誤的描述 |
FIELDWIDTHS | 字段寬度列表碍彭,以空格鍵分隔 |
FILENAME | 當(dāng)前文件名 |
FNR | 瀏覽文件的記錄數(shù) |
FS | 字段分隔符晤硕,默認(rèn)是空格鍵 |
IGNORECASE | 布爾變量,如果為真庇忌,則進行忽略大小寫的匹配 |
NF | 當(dāng)前記錄中的域數(shù)量 |
NR | 當(dāng)前記錄數(shù) |
OFMT | 數(shù)字的輸出格式 |
OFS | 輸出域分隔符舞箍,默認(rèn)是空格鍵 |
ORS | 輸出記錄分隔符,默認(rèn)是換行符 |
RLENGTH | 由match函數(shù)所匹配的字符串長度 |
RS | 記錄分隔符皆疹,默認(rèn)是空格鍵 |
RSTART | 由match函數(shù)所匹配的字符串的第1個位置 |
SUBSEP | 數(shù)組下標(biāo)分隔符疏橄,默認(rèn)值是\034 |
格式化輸出
awk借鑒C語言的語法,定義了printf
輸出語句略就∩悠龋基本語法如下:
? printf(格式控制符, 參數(shù))
格式控制符分為修飾符和格式符兩種表牢,如下:
修飾符 | 意義 |
---|---|
- | 左對齊 |
width | 域的步長 |
.prec | 小數(shù)點右邊的位數(shù) |
運算符 | 意義 |
---|---|
%c | ASCII字符 |
%d | 整型數(shù) |
%e | 浮點數(shù)窄绒,科學(xué)計數(shù)法 |
%f | 浮點數(shù) |
%o | 八進制數(shù) |
%s | 字符串 |
%x | 十六進制數(shù) |
內(nèi)置字符串函數(shù)
awk提供了強大的內(nèi)置字符串函數(shù),用于實現(xiàn)文本的字符串替換初茶、查找以及分隔等功能颗祝,下表列出:
函數(shù)名 | 意義 |
---|---|
gsub(r,s) | 在輸入文件中用s替換r |
gsub(r,s,t) | 在t中用s替換r |
index(s,t) | 返回s中字符串第一個t的位置 |
length(s) | 返回s的長度 |
match(s,t) | 測試s是否包含匹配t的字符串 |
split(r,s,t) | 在t上將r分為序列s |
sub(r,s,t) | 將t中第1次出現(xiàn)的r替換為s |
substr(r,s) | 返回字符串r中從s開始的后綴部分 |
substr(r,s,t) | 返回字符串r中從s開始長度為t的后綴部分 |
向awk腳本傳遞參數(shù)
awk腳本內(nèi)的變量可以在命令行中進行賦值浊闪,實現(xiàn)向awk腳本傳遞參數(shù)恼布,變量賦值放在腳本之后、輸入文件之前搁宾,格式為:
? awk腳本 parameter=value 輸入文件
條件語句和循環(huán)語句
看起來基本和C一樣折汞,框架如下——
if (條件表達(dá)式)
動作1
[else
動作2]
while(條件表達(dá)式)
動作
do
動作
while(條件表達(dá)式)
for(設(shè)置計數(shù)器初值; 測試計數(shù)器; 計數(shù)器變化)
動作
數(shù)組
數(shù)組是存儲一系列值的變量,可通過索引來訪問數(shù)組的值盖腿,索引需要用中括號括起爽待,數(shù)組的基本格式為:
? array[index]=value
形式和C一樣损同,但awk數(shù)組無需定義數(shù)組類型和大小,可以直接賦值后使用鸟款。一般用在for循環(huán)中
for (variable in array)
do somethng with array[variable]
更多操作可以查看:http://man.linuxde.net/awk