Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反人类;所以perl,python,ruby等脚本语言相当热火,我倾向用python,但处理一些简单任务python写的还是比较麻烦,无法一行命令解决,直到我发现了它-Pyp!

Pyp(Pyed piper)–一个python写的类似sed,awk的文本处理工具,简单优雅而强大~

安装:

ubuntu官方源就有:

1 aptitude install pyp

基本使用:

echo ‘string’ | pyp “命令”

一些例子:

pyp的命令用双引号””包围起来,双引号里字符串用单引号’包围

变量p:将每行作为一个字符串,p就是这这个字符串,python的字符串方法都可以用,譬如字符替换:

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

变量pp:将整个文本当做一个列表,每行是个列表元素,列表方法都可以使用,譬如行排序:

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

管道:

pyp的命令可以内嵌管道,此时管道后p或pp代表前一个命令的输出,类似unix下的标准管道:

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

这个例子通过管道将replace后的字符串再当做p,增加了额外字符串’EXAMPLE’

分割:

1 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('^#.*'),'')"

这句就删掉所有注释行

特殊变量:

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()”        //不知道什么意思
pyp.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)”        //自定义分隔符而不是默认的换行符

相关文章

Pyp 替代sed,awk的文本处理工具的更多相关文章

  1. awk 一 文本处理工具

    简介 awk 是逐行扫描文件(从第1行到最后一行),寻找含有目标文本的行: 如果匹配成功,则会在该行上执行用户想要的操作. 反之,则不对行做任何处理. awk 命令的基本格式为: awk [选项] ' ...

  2. 日志分析-利用grep,awk等文本处理工具完成(2019-4-9)

    0x00 基础日志分析命令 1. tail - 监控末尾日志的变化 $tail -n 10 error2019.log #显示最后10行日志内容 $tail -n +5 nginx2019.log # ...

  3. 【Linux】 字符串和文本处理工具 grep & sed & awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  4. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  5. Linux的文本处理工具浅谈-awk sed grep

    Linux的文本处理工具浅谈 awk   老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...

  6. Linux 文本处理工具grep,sed,awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. shell之三大文本处理工具grep、sed及awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  8. AWK文本处理工具(Linux)

    AWK文本处理工具(Linux) PS:刚开始实习,就给了个处理百万级别数据的任务,以前学过SHELL的一些东西sed/awk之类的处理,但是也没有具体的应用,只是在10几行10几列的小数据操作过,所 ...

  9. linux下的文本处理命令sed&awk&grep

    Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...

随机推荐

  1. ARC小知识

    ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting).简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管 ...

  2. ROS

    1 SSH 为什么我用 ssh 用户名 就不行,用 ssh xxx.xxx.xxx.xxx -l 用户名 就可以了呢 2 SCP 传送文件到另一个IP   用法: scp xxx  root@xx.x ...

  3. Java Web动态配置log4j

    导入log4j的jar包, 在web.xml中做如下配置 <!-- Log4j Configuration --> <context-param> <param-name ...

  4. 文件墙 CFilewall

    文件墙 CFilewall 记于 2013-09-26 == @[代码] [C#] []WPF] #### 使用了一些公司的组件和放大,但是不多,可以单独抽取出来 --- 程序结构 - Control ...

  5. php对数组排序代码

    php对数组排序,介绍了和php,有关的知识.技巧.经验,和一些php源码等. 对数组排序 usort() 函数使用用户自定义的函数对数组排序. */ function cmp($a, $b) //用 ...

  6. 常用的php数组排序函数

    分享几个php数组排序函数,每个函数出去sort是排序的意思前缀字母的含义分别代表: a 索引 k 数组键 r 逆向 u 用户自定义 顺序排序函数 sort — 对数组排序  ksort — 对数组按 ...

  7. apache+tomcat整合

    一 .Apache与Tomcat的比较 apache支持静态页面,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是 ...

  8. 世界级Oracle专家Jonathan Lewis:我很为DBA们的未来担心(图灵访谈)

    部分节选 图灵社区:如果您的子女对计算机科学感兴趣,你会让他们选什么具体的方向呢? JL:我的孩子对计算机科学一点都不感兴趣,甚至对科学都没什么兴趣.他们主修的都是艺术.如果要我给其他的人建议的话,我 ...

  9. OpenNMS架构介绍

    一.OpenNMS简介 OpenNMS的开发基于TMN及FCAPS这两个模型. 电信管理网络(TMN)是由 ITU-T 推荐 M.3000于1985年提出作为一种应用于电信服务供应商所持有的运营支持系 ...

  10. hive 操作(转)

    1.命令行操作 (1)打印查询头,需要显示设置: set hive.cli.print.header=true; (2)加"--",其后的都被认为是注释,但 CLI 不解析注释.带 ...