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)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...
随机推荐
- (转)wxWidgets 2.9.2svn(3.x)最小体积编译方法
官方论坛.网上记录的wxWidgets编译方法,会导致编译后的程序库非常大,原因在于对编译的方法选择不当.下面简单总结一下如何编译最新的SVN代码.下载最新源码(每日构建):http://biolpc ...
- Java经典编程题50道之三十六
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数. public class Example36 { public static void main(String[] a ...
- android进入adb shell步骤及修改sqlite数据库文件的权限
1 准备工作 (1)将adb.exe从 \Sdk\platform-tools目录下移动到 \Sdk\tools目录下(主要是看emulator这几个文件在哪个文件夹就把adb.exe移动到哪个文件 ...
- [0] CollectionBase与索引符DictionaryBase与迭代器
对于简单数组来说,需要用固定的大小来初始化,才能使用: Animal[] myAnimal=new Animal[10]; myAnimal[0]=new Cow("Ken"); ...
- Java IO学习笔记三
Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...
- AngularJS高级程序设计读书笔记 -- 模块篇
一. 模块基础 1. 创建模块 <!DOCTYPE html> <html ng-app="exampleApp"> <head> <ti ...
- 关于MATLAB处理大数据坐标文件2017526
运行六个特征,提高了3分,也就是说以前做的特征已经用完了,穷途末路,依靠以前的特征已经很难取得进步了,提出以下建议 1.测试集曾经运行错误的数据尽早画出图形,并尽可能发现问题并提出特征 2.运行其他程 ...
- zepto的使用方法
有些不了解zepto的同学在刚接触的时候肯定有很多疑惑,这个东西怎么用啊,去哪里下载啊,什么时候该用什么时候不该用啊,其实我以前也是这样的.jquery使用多了那么就让我们一起来了解下zepto把. ...
- 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6”
"System.InvalidOperationException"类型的未经处理的异常在 mscorlib.dll 中发生 其他信息: 无法为具有固定名称"MySql. ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...