當前位置:成語大全網 - 新華字典 - Pyp–壹個替代sed,awk的文本處理工具

Pyp–壹個替代sed,awk的文本處理工具

Linux上文本處理工具雖不少,像cut,tr,join,split,paste,sort,uniq,sed,awk這些經典工具讓人眼花繚亂,而且都太老了,使用方法都不太人性化,尤其awk,語法簡直反人類;所以perl,python,ruby等腳本語言相當熱火,我傾向用python,但處理壹些簡單任務python寫的還是比較麻煩,無法壹行命令解決,直到我發現了它- Pyp !

Pyp(Pyed piper)–壹個python寫的類似sed,awk的文本處理工具,簡單優雅而強大~

** 安裝:**

ubuntu官方源就有:

aptitude install pyp

基本使用:

echo ‘string’ | pyp “命令”

變量p:

將每行作為壹個字符串,p就是這這個字符串,python的字符串方法都可以用,譬如字符替換:

cat test.txt |pyp "p.replace('123','abc')"

變量pp:

將整個文本當做壹個列表,每行是個列表元素,列表方法都可以使用,譬如行排序:

cat test.txt |pyp "pp.sort()"

管道:

pyp的命令可以內嵌管道,此時管道後p或pp代表前壹個命令的輸出,類似unix下的標準管道:

echo 'FOO IS AN ' | pyp p.replace('FOO','THIS')|p+'EXAMPLE'"

這個例子通過管道將replace後的字符串再當做p,增加了額外字符串’EXAMPLE’

分割:

echo /this/is/a/splitting/example | pyp "p.split('/')"

將產生壹個有序號的輸出

算數運算:

echo 'qwe665' | pyp "(int(p[3:]) + 1)"

同時處理兩個文本:

使用“–text_file”標識可以操處理第二個文本,類似於”p”"pp”,第二個文本行和整體用變量”fp”"fpp”替代: cat a.txt | pyp "p + fp" --text_file b.txt

正則表達式:

pyp也支持正則,p.re(正則表達式)就行

cat a.txt | pyp "p.replace(p.re('^#.*'),'')"

這句就刪掉所有註釋行

PYP參考手冊:

特殊變量:

p

pp

original //original line by line input to pyp

o //same as original

sp //second steam line input, just like p, but from all non-flag arguments AFTER pyp

quote ?//a literal ” (double quotes can’t be used in a pyp expression)

paran ?//a literal ‘

dollar ?//a literal $

n ?//line counter (1st line is 0, 2nd line is 1,…use the form “(n+3)” to modify this value.

nk //n + 1000

date //date and time. Returns the current datetime.datetime.now() object.

pwd //present working directory

history ?//history array of all previous results: so pyp “a|u|s|i|h[-3]” shows eval of s

h ?//same as history

letters ?//abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

digits ?//0123456789

punctuation //!”#$%&’()*+,-./:;<=>?@[]^_{|}~`

與split和join有關的變量:

s OR slash //p split/joined on “/”

d OR dot //p split/joined on “.”

w OR whitespace //p split on whitespace (on spaces,tabs,etc), joined on spaces

u OR underscore //p split/joined on ‘’

c OR colon //p split/joined on ‘:’

mm OR comma //p split/joined on ‘,’

m OR minus //p split/joined on ‘-’

a OR all //p split on [' '-=$...] (on “All” metacharacters)

與p有關變量:

p.dir path DIRECTORY

p.file path FILE

p.ext path EXTENSION

行級操作:

pyp “p” //直接打印各行

pyp “p +’FOO’” //每行append字符串

pyp “p +’FOO’| p + o” //append的新字符串再與老字符串做操作

pyp “p.replace(‘FOO’,'GOO’)” //字符串替換

pyp “p.kill(‘GOO’)” //刪除特定字符串

string substitution pyp “‘%s FOO %s %s GOO’%(p,p,5)”

pyp “p.split(‘FOO’)” ` //分割成列表

pyp “slash“ //用’/'分割成列表的簡寫

pyp “slash[0]” ?//用’/'分割成列表並選取第壹列

pyp “s[2:6]” //用’/'分割成列表並選取多列

pyp “s[2:6] | s” ?//用’/'分割成列表並選取多列再用’/'拼接

echo ‘qwe665′ | pyp “(int(p[3:]) + 1)” //算數操作(要用()包圍)

pyp “p.replace(p.re(REGEX),STR)” //正則表達式

pyp “p.letters()” //只輸出字符

pyp “p.digits()” //只輸出數字

pyp “p.punctuation()” //只輸出標點

pyp “p.clean(DELIM)” //處理亂碼字符,將其替換為DELIM

文本當做列表操作:

pyp “pp” //輸出整個文本

pyp “pp.sort()” //排序

pyp “pp.uniq” //去重

pyp “pp.oneline” //合並所有列表元素到壹行字符串,元素間以空格分開

pyp “pp.unlist()” //不知道什麽意思

pp.divide(N) //每N個元素合並壹個新列表

pyp “pp.before(‘FOO’[,n])” ////輸出指定字符串的上面n行,默認為壹行

pyp “pp.after(‘FOO’[,n])” //輸出指定字符串的下面n行,默認為壹行

pyp “pp.matrix(‘FOO’[,n])” //輸出指定字符串的上下面各n行,默認為壹行

pyp ”[x for x in pp]” //遍歷列表

pyp “pp.sort() | p” //文本當做列表處理完再轉換成文本

pyp “pp.delimit(DELIM)” //自定義分隔符而不是默認的換行符