1.去掉所有行的空格 sed -i ’s/ //g’ df.txt 2.去掉所有行的空格 sed -e ’s/ //g’ df.txt >cwm.txt
3.将每一行拖尾的“空白字符”(空格,制表符)删除 sed ’s/ *$//’ df.txt >cwm.txt
4.将每一行中的前导和拖尾的空白字符删除 sed ’s/^ *//;s/ *$//’ df.txt >cwm.txt
5.去掉空行 sed ’/^$/d’ df.txt >cwm.txt sed -e ’/^$/d’ df.txt >cwm.txt sed -i ’/^$/d’ df.txt 这三个是等价的 但第三个会改动原文件
6.去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m) sed -i ’s/^M//g’ df.txt
7.去掉windows下的回车符 (注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m) sed -e ’s/^M//g’ df.txt >cwm.txt
也等价于 dos2unix df.txt >cwm.txt
---------------------------------------------------------------------------------------------- ******怎么去掉文件中行尾的回车符号^M****** sed ’s/^M//g w newfilename’ oldfilename 其中: s 表示Searchg 表示搜索全文,缺省是搜索第一个^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m w 表示写到新文件中.
例子1 86103113234778, 86103145878770, 86103116778768, 86103111879708, sed ’s/^86//;s/,$//’ user.txt #去掉开头的86 及尾部的,号 例子2 103113234778 103145878770 103116778768 103111879708 sed -e ’s/^/86/’ user.txt #每行行首加上86 86103113234778 86103145878770 86103116778768 86103111879708
********************************************************* http://www.idcnews.net/html/edu/20080425/300682.html
1. sed 命令简介 Sed(a stream editor)是流线型、非交互式编辑器。他允许您执行和vi编辑器里相同的编辑任务。Sed 程式不是和编辑器交互式工作的,而是让您在命令行里敲入编辑的命令,给文档命名,然后在屏幕上查看命令输出结果。 2. sed 怎样工作 sed 编辑器按一次处理一行的方式来处理文档,并把输出送到屏幕上。 3. sed 能够用寻址的方式来决定想要编辑哪一行。 4. sed 命令和选项 选项 功能 a\ 在当前行上添加一个文本行或多个文本行 c\ 用新闻本改变(取代)当前行里的文本 d 删除行 i\ 在当前行之前插入文本 h 把模式空间内容复制到一个固定缓存 H 把模式空间内容添加到一个固定缓存 g 得到固定缓存里任何的并复制到模式缓存,重写其内容 G 得到固定缓存的内容并复制到模式缓存,添加到里面 I 列出不打印的字符 p 打印行 n 读下一输入行,并开始用下一个命令处理换行符,而不是用第一个命令 q 结束或退出sed r 从一个文档读如行 ! 把命令应用到除了选出的行以外的其他任何行 s 把一个字串替换成另一个替换标志 g 在一行上进行全局替换 p 打印行 w 把行写到一个文档中 x 用模式空间的内容交换固定缓存的内容 y 把一个字符转换成另一个(不能和整则表达式元字符一起使用) 5、 sed元字符 基本上,grep和vi使用的元字符都能够用在sed中,&是特例: & :保存搜索串以便能够记在替换串里 e.g.: s/love/**&**/ &号代表搜索串。串love将被星号包围的自身所替代;即love变成**love**
6 sed实例 1> 打印:p命令 sed ’/north/p’ datafile 默认输出任何行,找到north的行重复打印 sed ?n ’/north/p’ datafile 禁止默认输出,只打印找到north的行 2> 删除:d命令 sed ’3d’ datafile 删除第三行,其余行输出到屏幕 sed ’3,$d’ datafile 从第3行到最后一行都删除,将剩余部分输出到屏幕 sed ’/north/d’ datafile 将含有north的行删除,其余输出到屏幕 3> 替换:s命令 sed ’s/west/north/g’ datafile 解释:找到datafile中的任何west并替换成north,将替换后的内容输出到屏幕。 sed ’s/[0-9][0-9]$/&.5/’ datafile 解释:在替代串里的&字符代表在搜索串中真正找到的。 每个以两个数字结尾的行都被他自己取代,且要在后面加上.5 sed -n ’s/Hemenway/Jones/gp’ datafile 解释:任何的Hemenway所在的位置都用Jones来取代,而且只有改变的行被打印。 -n和p命令选项相结合来禁止默认输出。g代表全局替换 sed -n ’s/\(Mar\)got/\1ianne/p’ datafile 解释:模式Mar被封装在括弧里且在一个专用寄存器里存为标记1。 在替换串里他将被引用做\1。然后用Marianne替代Margot。 sed ’s#3#88#g’ datafile 解释:s命令后面的字符是搜索串和替换串之间的分界符。 默认的分界符是个正斜杠,但也能够改变(只有使用s命令时)。 无论s命令后面跟什么字符,他都是新的串分界符。 当搜索包含一个正斜杠的模式,如路径或生日时,这种技巧可能有用 4> 被选中的行的范围:逗号 sed -n ’/west/,/east/p’ datafile 打印在west和east之间的模式范围内任何行。假如west出现在east之后, 则打印从west到下一个east或到文档末尾的行,无论哪种情况先出现都能够。 sed ’/west/,/east/s/$/**VACA**/’ datafile 解释:对于在模式west到east范围内的行,行末尾将用**VACA**来取代。 5> 多次编辑 -e 选项 sed -e ’1,3d’ -e ’s/Hemenway/Jones/’ datafile -e选项允许多次编辑。不同的编辑顺序可能导致不同的结果。 例如,假如两个命令都执行了替换,第一次替换可能影响第二次替换。 6> 从文档中读取:r命令 sed ’/Suan/r newfile’ datafile 解释:r命令从newfile中读取内容,将内容输出到Suan的后面。 假如datafile中Suan出现的次数不只一次,则分别放到Suan的后面。 7> 写入文档:w命令 sed -n ’/north/w newfile’ datafile 解释:w命令把指定的行写入到一个文档。 本例中任何的包含north的行写入到newfile中。 等同于sed -n ’/north/p’ datafile >newfile 8> 添加:a命令 $ sed ’/north/a\ > ---->THE NORTH SALES DISTRICT HAS MOVEDTHE NORTH SALES DISTRICT HAS MOVED 插入:i命令 $ sed ’/north/i\ > ---->THE NORTH SALES DISTRICT HAS MOVEDTHE NORTH SALES DISTRICT HAS MOVED下一个:n命令 $ sed ’/eastern/{n;s/AM/Archie/;}’ datafile
eastern EA TB Savage 4.4 .84 5 20 northeast NE Archie Main Jr. 5.1 .94 3 13 …… 解释:假如在某一行里模式eastern被匹配,n命令使sed区的下一行, 用该行代换模式空间,用Archie替换AM,打印并继续。 11>变换:y 命令 sed ’1,3y/abcdefghijklmnopqrst/ABCDEFGHIJKLMNOPQRST/’ datafile 解释:将对应字母进行转换。 12>退出:q 命令 sed ’5q’ datafile 解释:在打印了5行之后,用q命令退出sed程式。 13>保存和取得:h和G命令 $ sed -e ’/southeast/h’ -e ’$G’ datafile 解释:当sed 处理文档时,每行都存在模式空间(pattern space)的临时缓存中。除非行被禁止打印或删除,否则行将在处理完后被打印到屏幕,然后请模式空间并把下一输入行保存在那里等待处理。在这个例子中, 在找到模式之后,把他放在模式空间里,而且h命令复制他并把他存到另一个叫做保存缓存(holding buffer)中。第二个sed指令里,当读入最后一行($)时,G命令告诉sed从包存缓存中取得该行并放回模式空间缓存,添加到当前存在那里的行中。 本例子就是最后一行。 $ sed -e ’/WE/{h;d;}’ -e ’/CT/G’ datafile 解释:第一个命令h将找到了WE的行放到保存缓存中,然后删除该行;第二个命令/CT/G就是在找到了CT的行的后面加入保存缓存的内容。
14>G和g的区分 G命令在符合的条件行后面添加保存缓存中的内容;g命令用保存缓存中 15>sed 命令的花括号{}的作用 花括号{}中能够放入多个命令,每个命令后面要用分号;。 16>保存和交换:h 和 x命令。 $ sed -e ’/Patricia/h’ -e ’/Margot/x’ datafile 解释:x命令将找到的行用保存缓存中的内容替换。 7. 用sed来编写命令表 sed 命令表(script)是文档里的一个sed命令列表。用-f选项来引用一个命令表文档。编辑sed命令表有特别需要:命令末尾不能有任何尾随的空白符或文本。假如命令不是自成一行,就必须用分号结束。
|