程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> grep,awk,find,sed等文本處理命令使用總結

grep,awk,find,sed等文本處理命令使用總結

編輯:PHP基礎知識
 

0:首先要了解的正則表達式知識(跟php的正則表達式風格類似)

^               行首標識

$                篇尾標識或行尾標識

.                代表任意一個字符

?               代表前趨字符的一次出現

*               代表0個或多個前趨字符出現

[1-9]          代表一個屬於1-9的字符

[^1-9]       代表一個不包含於1-9的字符

/<             詞首標識

/>             詞尾標識 x/{m,n/}    代表x的至少m次,至多n次出現

/( /)           引用標識,可以多次引用,並在後面以/1 /2來引用


1 grep命令

通用格式 grep [option] regx file

常用示例:

grep -i ‘yyy’ /etc/passwd          不區分大小寫顯示文件中有yyy的行

grep -v ‘^yyy’  /etc/passwd      顯示文件中開關不是yyy和行

grep -n ‘yyy’  /etc/passwd        顯示文件中含有yyy的行,且打印此行在文件中的行號

grep -lr ‘$yyy’  /etc                    遞歸查找/etc下包含行結尾為yyy的文件名

grep -Lr ‘yyy’  /etc                     遞歸查找/etc下文件中不包含yyy的文件名

grep -c ‘yyy’  /etc/passwd         統計文件中yyy出現的行數


2 awk

通用格式:gawk ‘pattern {action}’  file

cmd | gawk ‘pattern {action}’

如果沒有pattern,則對所有行都采用action,如果沒有action,則打印匹配行。在pattern中可以使用各種定義的變量$0,,NF,NR等.

工作原理:awk 掃描一行,放入變量$0中,然後行被分隔成各個域,以指定的分隔符進行分離,默認為空格,可以通過參數FS指定。各個域都存於變量$i中,至多100個域。

gawk -F : ‘{print $1}’  /etc/passwd         打印所有用戶名

 格式化輸出:
print 支持使用轉義字符,及OFMT變量定義的輸出數字格式
nawk ‘/Sally/{print “/t/tHave a nice day, ” $1, $2 “/!”}’ employees
nawk ‘BEGIN{OFMT=”%.2f”; print 1.2456789, 12E 2}’
printf支持C語言同名函數的所有功能
echo “UNIX” | nawk ‘ {printf “|%-15s|/n”, $1}’
nawk ‘{printf “The name is: %-15s ID is %8d/n”, $1, $3}’ employees
域分隔符:
nawk F'[ :/t]’ ‘{print $1, $2, $3}’ employees
pattern
pattern{ action statement; action statement; etc. }
pattern可以是正則表達式,也可以是條件表達式,條件表達式甚至可以進行數學運算
~ 匹配運算 nawk ‘$1 !~ /ly$/’ employees
比較表達式:支持==,>=,<=,!=,~,!~等各種比較操作,並支持&&,||等邏輯表達式連接多個比較表達式。
awk ‘$3 * $4 > 500′ filename
范圍模式:
awk ‘/Tom/,/Suzanne/’ filename

Action
{}中的Action的極其類似C語言的子句,裡面可以嵌套子句,可以使用條件、循環、支持變量函數定義、使用自定義或內部變量、內部函數,調用系統命令,輸入輸出重定向等強大的能力。
變量:var=value,若變量沒有初始化,字符串為””,數字為0。
nawk ‘$1 ~ /Tom/ {wage = $2 * $3; print wage}’ filename
內置變量:
ARGC                 Number of command-line argument
ARGIND               Index in ARGV of the current file being processed from the command line (gawk only)
ARGV                 Array of command-line arguments
CONVFMT              Conversion format for numbers, %.6g, by default (gawk only)
ENVIRON              An array containing the values of the current environment variables passed in from the shell
ERRNO                Contains a string describing a system error occurring from redirection when reading from the getline function or when using the close function (gawk only)
FIELDWIDTHS          A whitespace-separated list of fieldwidths used instead of FS when splitting records of fixed fieldwidth (gawk only)
FILENAME             Name of current input file
FNR                  Record number in current file
FS                   The input field separator, by default a space
IGNORECASE           Turns off case sensitivity in regular expressions and string operations (gawk only)
NF                當前記錄的域個數,$NF可以引用到最後一個域
NR                   當前的記錄序號
OFMT                 Output format for numbers
OFS                  Output field separator
ORS                  Output record separator
RLENGTH              Length of string matched by match function
RS                   Input record separator
RSTART               Offset of string matched by match function
RT                   The record terminator; gawk sets it to the input text that matched the character or regex specified by RS
SUBSEP               Subscript separator
BEGIN模式後跟的ACTION,表示在awk處理文本以前進行的動作,可以用來初始化各種內部變量,或其他動作。
END  模式後跟的ACTION,表示在awk處理結束後進行的動作。
重定向:
nawk ‘$4 >= 70 {print $1, $2 > “passing_file” }’ filename
nawk ‘BEGIN{while(“ls” | getline) print}’
條件語句
{if ( $3 > 89 && $3 < 101 ) Agrade++
else if ( $3 > 79 ) Bgrade++
else if ( $3 > 69 ) Cgrade++
else if ( $3 > 59 ) Dgrade++
else Fgrade++
}
循環:支持while,for的的標准循環結構及break,continue等。
{
for ( x = 3; x <= NF; x++ )
if ( $x == 0 ) { print “Get next item”; continue}
}
數組:awk的數組是map類型的,索引可以是數字也可是字符串。同時支持多維數組。
nawk ‘{id[NR]=$3};END{for(x = 1; x <= NR; x++) print id[x]}’ employees
nawk ‘/^Tom/{name[NR]=$1};END{for(i in name){print name[i]}}’ db
nawk ‘{count[$2]++}END{for(name in count)print name,count[name] }’ datafile4
split(string,array,FS)  按照分隔符FS將string分成多個域放在array中。

內置函數:
(g)sub(regx,string,[tstring])   (在tstring位置處)將regx的第一次(全部)出現替換為string。
index(string,substr)            返回子串的位置
length(string)                  返回字串的長度
substr(string,start,[len])      返回start開始長為len的串
match(string,regx)              返回正則表達式在string中的匹配位置
sprintf()                       返回指定格式的串
awk ‘{line = sprintf ( “% 15s %6.2f “, $1 , $3 ); print line}’ filename
sin cos exp int log rand atan2 sqrt srand等
求子串經常用來格式化具有固定長但沒有分隔符的域。而gsub通常用來替換某些無用的字符,使用替換後字符串更有意義。
自定義函數:
function name ( parameter, parameter, parameter, … )
{
statements
return expression
}

 

3 find

命令格式: find [選項] [路徑] [表達式]

find的選項只有三個P,L,H,是用來控制是否需要follow鏈接文件,-P表示不follow,-L表示follow,-H表示當鏈接出現在[路徑]中時才follow,否則不follow

[路徑]表示find查找的目錄,如果為空則默認為當前目錄

find使用的技巧在於使用好[表達式],表達式可以指定查找特定文件名、特定時間訪問或修改的文件、特定大於的文件、名字符合特定正則表達式的文件等等等

find可以後面啟用多個表達式,多個表達式間可以使用-and -or 或-not連接

一個完整的表達由三部分構成: [選項]  [測試] [執行動作]

示例: find  /tmp  -maxdepth 1 -name “*.log” -exec cat {} \; 其中-maxdepth 1為選項,-name “*.log”為測試條件,-exec…是動作

   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved