版权申明:本文为博主窗户(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不擅长的事情是粉丝的追求,似乎这种方式很有黑客精神的感觉,其实很屌丝。

  http://sed.sourceforge.net/

  这个网址叫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的粉丝的更多相关文章

  1. 用sed实现wc -c的功能

    sed是所谓的流编辑器,我们经常用它来做一些文本替换的事情,这是sed最擅长的事情,如sed 's/Bob/Tom/g'就是把文章中所有的Bob改成Tom. sed是图灵完备的,作为sed的粉丝,喜欢 ...

  2. 用sed实现wc -w的功能

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7663831.html 作者:窗户 Q ...

  3. sed的应用

    h3 { color: rgb(255, 255, 255); background-color: rgb(30,144,255); padding: 3px; margin: 10px 0px } ...

  4. 文本处理三剑客之sed命令

    第十八章.文本处理三剑客之sed命令 目录 sed介绍 sed命令常用选项 sed常用编辑命令 sed使用示例 sed高级语法 18.1.sed简介 sed全名stream editor,流编辑器,s ...

  5. 6-2 sed 命令

    1. sed : stream editor,流编辑器 是处理纯ASICC纯文本,按行琢行操作的. 编辑器有两种,行编辑器和全屏编辑器 sed:默认不编辑原文件,仅对模式空间中的数据做处理,而后.处理 ...

  6. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

  7. sed awk grep三剑客常用

    sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...

  8. linux shell 用sed命令在文本的行尾或行首添加字符

    转自 http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed ...

  9. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

随机推荐

  1. 禁止windows10带来的三大隐患问题

    毫无疑问的说.windows10是目前windows发布的最好版本之一,最重要的是其“免费”了.这几天在互联网上,win10有太多的争议了,尤其是你在享受免费的同时,隐私也正在流向微软公司的服务器.. ...

  2. Spring学习(10)--- @Qualifier注解

    按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以指定单独的构造器参数或方法参数 可用于注解集合类型变量 例子: package c ...

  3. Python 基于TK 文本编辑器

    #coding=utf-8 import sys,os import tkFileDialog from Tkinter import * from tkFont import Font print ...

  4. banner自动生成工具,ascii文字展示

    前言 post@ Ryan-Miao@github.io Spring-Boot里有个banner的功能,刚开始觉得很鸡肋.然而,现在觉得蛮有意思的.无聊的程序员. 生成文字 大部分工具只支持英文的库 ...

  5. .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)

    我们知道Kafka支持Consumer Group的功能,但是最近在应用Consumer Group时发现了一个Topic 的Partition不能100%覆盖的问题. 程序部署后,发现Kafka在p ...

  6. libpng处理png图片(二)

    一,实现效果:图片剪切, 图片拼接                      ------------------切割后------------------>                  ...

  7. MySQL数据表的创建、查看、插入

    数据表:数据表(或称表)是数据库最重要的组成部分之一,是其他对象的基础.     1.首先我们打开一个数据库(这里我打开的是新创建的一个aaa数据库). 打开数据库:use + 数据库名;     2 ...

  8. php中的XML转数组

    /** * 最简单的XML转数组 * @param string $xmlstring XML字符串 * @return array XML数组 */ function simplest_xml_to ...

  9. [leetcode-551-Student Attendance Record I]

    You are given a string representing an attendance record for a student. The record only contains the ...

  10. Chapter 2. Video Formats and Quality

    本章节主要介绍一些视频格式相关的基础知识. 交织(Interlace) 即每一个采样帧采样时隔行采样,奇数行和偶数行交替. YCbCr 人眼视觉系统(Human Visual System, HVS) ...