Chinaunix

标题: sed用法个人笔记(高手忽略) [打印本页]

作者: yhyhyh11111    时间: 2009-12-10 21:17
标题: sed用法个人笔记(高手忽略)
1.Introduction
        使用sed时要记住一个重要事实,无论命令是什么,sed
    并不与初始化文件打交道,他操作的知识一个拷贝,然后
    所有的改动如果没有重定向到一个文件,将输出屏幕。
  
2.sed怎么样读取数据
        sed文件的一个文本行或从标准输入的几种格式中读取数据,
        将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一个
        命令,并使用这些命令查找模式或定位行号编辑它。重复
        此过程直到命令结束。

2.调用sed的三种方式。
        1.在命令行直接输入
        2.在脚本中编写sed,然后调用
        3.将sed插入脚本,并使用sed脚本执行
       
3.以下举例都以 quote.txt 为例

The honeysukle band played all night long for only $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through ata 23:10.
The local nurse Miss P.Neave was in attendance.



        1.打印  p
                举例1:打印1到3行。
                                        sed -n '1,3p' quote.txt
                举例2: 打印匹配单词Neave
                                        sed -n '/Neave/p' quote.txt
                举例3:打印匹配单词the并在第4行
                                        sed -n '4,/The/p' quote.txt
                举例4:匹配任意字母,并以ing结尾,
                                        sed -n '/.*ing/p' quote.txt
                举例5:如果只打印行号及匹配行,必须使用两个
                      sed命令,并使用e选项。第一个命令打印模式
                          匹配行,第二个使用=选项打印行号,
                          格式为sed -n -e /pattern/p -e /pattern/=。
                                        sed -n -e/'Neave/p' -e '/Neave/=' quote.txt
                                       
                                       
        2.替换文本 s 格式 sed 's/old/new/[g/p/w/n]' 文件名
                                       
                                       
                举例1:替换night为NIGHT
                                        sed 's/night/NIGHT/' quote.txt
                                       
                举例2:替换splendid为SPLENDID,并将替换行写入yanhai.txt
                                        sed 's/splendid/SPLENDID/w yanhai.txt' quote.txt
                                       
                举例3:[在new部分不写任何东西,保留空白,但仍需要用斜线括起来,
                          表示删除].
                          删除$符号($需要转义)
                                        sed 's/\$//'
                                       
                举例4:将替换的结果写入一个文件(yanhai.txt) 这里用到了/w
                                        sed 's/splendid/SPLENDID/w yanhai.txt' quote.txt
                          注意:要将文件名括在sed的单引号里
       
                举例5:替换修改字符串(这里个人的感觉更像是插入字符串)
                          格式:sed 's/old/new空格&' 文件名 [将new插在old前]
                                        sed 's/old/&空格new' 文件名 [将new插在old后]
                          将"Hello"插入在nurse前
                                        sed 's/nurse/"Hello" &' quote.txt
       
       
        3.匹配后退出 p 格式 address q
               
                举例1:查询首次出现模式,然后退出(需要将q放在sed'语句末尾)
                                        sed '/.a.*/q' quote.txt
作者: haimming    时间: 2009-12-10 21:43
学习一下
另,下面的说法不完全正确,因为现在的gnu新一点的版本,都有i参数,可以直接修改原文件
1.Introduction
        使用sed时要记住一个重要事实,无论命令是什么,sed
    并不与初始化文件打交道,他操作的知识一个拷贝,然后
    所有的改动如果没有重定向到一个文件,将输出屏幕。

作者: wtuter    时间: 2009-12-10 22:04
标题: 回复 #1 yhyhyh11111 的帖子
记笔记是个好习惯,
作者: Shell_HAT    时间: 2009-12-10 23:28
“sed并不与初始化文件打交道”这句还行,即使是-i也是通过临时文件来实现的。但后面的“将输出屏幕”就显得不那么与时俱进了
作者: yhyhyh11111    时间: 2009-12-11 09:22
了解了~~
貌似  有个w参数也是写入文件的吧
作者: blackold    时间: 2009-12-11 09:33
支持!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2