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官方源就有:
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的文本处理工具的更多相关文章
- awk 一 文本处理工具
简介 awk 是逐行扫描文件(从第1行到最后一行),寻找含有目标文本的行: 如果匹配成功,则会在该行上执行用户想要的操作. 反之,则不对行做任何处理. awk 命令的基本格式为: awk [选项] ' ...
- 日志分析-利用grep,awk等文本处理工具完成(2019-4-9)
0x00 基础日志分析命令 1. tail - 监控末尾日志的变化 $tail -n 10 error2019.log #显示最后10行日志内容 $tail -n +5 nginx2019.log # ...
- 【Linux】 字符串和文本处理工具 grep & sed & awk
Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...
- 三大文本处理工具grep、sed及awk的简单介绍
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- Linux的文本处理工具浅谈-awk sed grep
Linux的文本处理工具浅谈 awk 老大 [功能说明] 用于文本处理的语言(取行,过滤),支持正则 NR代表行数,$n取某一列,$NF最后一列 NR==20,NR==30 从20行到30行 FS ...
- Linux 文本处理工具grep,sed,awk
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- shell之三大文本处理工具grep、sed及awk
grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...
- AWK文本处理工具(Linux)
AWK文本处理工具(Linux) PS:刚开始实习,就给了个处理百万级别数据的任务,以前学过SHELL的一些东西sed/awk之类的处理,但是也没有具体的应用,只是在10几行10几列的小数据操作过,所 ...
- linux下的文本处理命令sed&awk&grep
Sedsed 是个精简的.非交互式的编辑器.他能执行和编辑vi和emacs相同的编辑任务.sed编辑器不提供交互使用方式:只能在命令行输入编辑命令.指定文件名,然后在屏幕上察看输出.sed编辑器没有破 ...
随机推荐
- JS获取非行间样式及兼容问题
获取非行间样式: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 7款外观迷人的HTML5/CSS3 3D按钮特效
1.CSS3超酷3D弹性按钮 按钮实现非常简单 今天我又要向大家分享一款实现超级简单的CSS3 3D弹性按钮,它在鼠标按下时不仅从视觉上感受到3D立体的效果,而且更有弹性的动画特效,非常可爱. 在线演 ...
- 【学习】Windows PE文件学习(一:导出表)
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...
- 用户输入内容转换成Pig Latin形式。
//(单词的第一个元音字母之前的一道单词后面,以"ay"结尾,英语单词首字母为元音字母或者没有元音字母的以“ay”为后缀.)package toPigLatin; import j ...
- callback调用测试
<html> <head> <script> var context="全局"; var testObj={ context:"初始& ...
- PHP 登录完成后如何跳转上一访问页面
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面 项目需求 访问网站页面时,有的页面需要授权才能访问,这时候就会要 ...
- MySQL数据库主从复制
一.MySQ主从复制(主库写入数据,从库读取数据) MySql官方下载地址:http://dev.mysql.com/downloads/mysql/ MySql常用命令: 设置密码 UPDATE U ...
- python学习2——数据类型
1. python是强类型 动态类型的语言,动态类型表明它可以在声明变量的时候,不必指定数据类型,强类型规定了它不能容忍隐式类型转换 2. python中的不可变类型有:int,string,tupl ...
- c语言之fopen参数(r+,w+,a+)
经查找一些资料,并且亲自实验之后得出: r+:打开已存在的文件时,光标位于开头,文件可读,可写, 写数据时,由于光标位于开头,所以会覆盖原有数据 w+:打开的文件已存在时,将覆盖原文件 a+:打开已存 ...
- swap分区添加
首先你需要使用命令:dd 来创建一个swapfile,然后你需要使用mkswap命令在设备或者文件中创建一个Linux swap分区a) 使用root用户登陆b) 使用下面的命令创建一个2G的 Swa ...