sed的粉丝
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7222794.html 作者:窗户 QQ:6679072 E-mail:6679072@qq.com
UNIX/LINUX下有个工具叫sed,起源于ed命令,但没有人机交互,完全是脚本语言。sed虽然是结构化的程序,但其虚拟出来的机器与我们实际机器相差甚远,依靠模式空间和保留空间的交替使用、正则表达式不断替换达到处理的目的。
sed有相当一部分粉丝,就如同lisp那样,因为与众不同,而用sed写出sed不擅长的事情是粉丝的追求,似乎这种方式很有黑客精神的感觉,其实很屌丝。
这个网址叫the sed $HOME,里面汇聚了很多精英脚本,一个个神一样的sed脚本啊。
http://sed.sourceforge.net/grabbag/scripts/dc.sed
the sed $HOME 里面的上面这个脚本,被我们当成是sed的终极脚本,脚本十分诡异,实现了一个dc计算器(UNIX下的一个基于逆波兰式的任意精度计算器),我曾试图读懂它,但不得不说,sed程序的确不是拿来给人读的。
我也曾经是sed粉丝中的一员,无论什么样的文本处理,我都希望尝试着用sed去写。
翻以前在论坛里的帖子,我曾经出过一道用sed题目:
得出一行中最大的数
比如
00123xdsd0176ddsdw201eew
得出201
19为其位置
sed里面没有任何直接的数学运算,此类问题都需要给诡异的技巧。我给了一个解答如下:
#!/usr/bin/sed -rnf
/[-]/!d
s/[^-]/ /g
s/$/ /
tloop
:loop
s/^( *)([-]+)( +)([-]+)( .*)$/\1b\2e\3b\4e\/
tmain h
s/[-].*/ /
s/.//g
:cnt
s/(^|;)/;/g
tcnt
s///g
s///g
s///g
s///g
s///g
s///g
s///g
s///g
:zero
s/;;/;;/g
tzero
s/(^$)|;$//
s/;//g
G
tend
:end
s/(.*)\n *([-]+).*$/\ \/
tend2
d
:end2
p
d :main
s/b(+)/\1b/g
h
:a
s/(bf*)[-]/\1f/
ta
/(bf*)e.*\1f/ {
:e
g
:b
s/[-]([-]*b.*b)/ \/
tb
:B
s/(b *)[-](.*b)/\ \/
tB
s/[be]//g
tloop
}
s/(bf*e)(.*)(bf*e)/\\/
/(bf*)e.*\1f/ {
:f
g
:c
s/(e.* )[-]([-]*b)/\ \/
tc
:C
s/(b *)[-]([^b]+)$/\ \/
tC
s/[be]//g
tloop
}
g
:d
/b(.).*b\/! {
/b(.).*b(.).*\[-]*\[-]*$/be
bf
} s/b([-])(.*)b([-])/\1b\\3b/
td
be
看了看,几年之前的代码居然也大致看懂了。随着论坛的衰落,现在没有这个心境写sed了,突然有些怀念以前。
sed的粉丝的更多相关文章
- 用sed实现wc -c的功能
sed是所谓的流编辑器,我们经常用它来做一些文本替换的事情,这是sed最擅长的事情,如sed 's/Bob/Tom/g'就是把文章中所有的Bob改成Tom. sed是图灵完备的,作为sed的粉丝,喜欢 ...
- 用sed实现wc -w的功能
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7663831.html 作者:窗户 Q ...
- sed的应用
h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...
- 文本处理三剑客之sed命令
第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...
- 6-2 sed 命令
1. sed : stream editor,流编辑器 是处理纯ASICC纯文本,按行琢行操作的. 编辑器有两种,行编辑器和全屏编辑器 sed:默认不编辑原文件,仅对模式空间中的数据做处理,而后.处理 ...
- 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od
awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk '' | output 1.首先要知道形式 awk 'command' fi ...
- sed awk grep三剑客常用
sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...
- linux shell 用sed命令在文本的行尾或行首添加字符
转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...
- Sed、Awk单行脚本快速参考
文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
随机推荐
- 遇到bug我会怎么做
我今天遇到一个问题,ztree显示数据,本来这个功能是没有问题的,但是当我新加入了几个页面筛选条件时,将集合传入ztree ,页面缺一直没显示出来,弄了两个小时,代码我都仔细排查了一次,发现没有问题, ...
- [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...
- C++实现密码强度测试
最近在博客中看到许多用js写的密码强度检测,我觉得挺有意思的,所以呢我打算自己也写个来玩玩,最可悲的是我还没学js,当然这不重要,所以呢打算用C++来写一个密码强度检测,这里我来给大家说说用JS写的和 ...
- Python:Anaconda安装虚拟环境到指定路径
1 曾经的困扰 有段时间,想使用基于不同python版本的anaconda,就直接从官网下载了两个不同的anaconda版本进行安装.刚开始的时候,还觉得也没啥问题.用了一小段时间,在安装其他的第三方 ...
- 【转载】Static 关键字的作用
原始日期:2016-07-16 17:53 一 普通的static关键字 1. 静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变 ...
- FutureTask分析(1.8)
FutureTask简介 FutureTask用于异步计算,也就是支持异步执行并返回结果.FutureTask本身是一个Runable,所以可以交给Thread来运行,在提交给Thread运行后,可以 ...
- 怎么样刷新frameset的整个页面
<a href="main.html?a=2" target="_parent">? 设置a链接的target属性值为_parent即可
- [leetcode-495-Teemo Attacking]
In LLP world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned ...
- 【LeetCode】49. Group Anagrams
题目: Given an array of strings, group anagrams together. For example, given: ["eat", " ...
- Codeforces 818B Permutation Game
首先看一下题目 B. Permutation Game time limit per test 1 second memory limit per test 256 megabytes input s ...