sed命令使用详解(上篇)

sed命令使用详解(上篇)

sed会处理每一行,除非你告诉它不要做。
例如:我们可以限制只对包含"Sebastopol"的行将"CA"替换为"California"。
命令:/Sebastopol/s/CA/California/g
 
g表示全局匹配,假如一行中有多个匹配的字符串,则全部执行替换。不加g表示1行只替换第1次匹配的字符串。
 
 
sed命令可以指定零个、一个或两个地址。每个地址都是一个描述模式、行号或者行寻址符号的正则表达式。
如果没有指定地址,那么命令将应用与每一行。
如果只有一个地址,那么命令应用于与这个地址匹配的任意行。
如果指定了有逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和他后面的行,直到匹配第二个地址的行(包括此行)。
如果地址后面跟由感叹号(!),那么命令就应用于不匹配该地址的所有行。
sed的删除命令 "d"
 
    1d : 只删除第一行
    $d : 只删除最后一行(这里表示行的结束,不要和正则中的$混淆)
    /^$/d : 此模式只删除空行。当使用正则作为地址提供时,只影响与这个模式匹配的行。正则必须封闭在斜杠(/)中。
    /^\.TS/,/^\.TE/d : 它删除了从第一个模式匹配的行开始,到第二个模式第一次出现的行匹配为止(包括此行)的所有行。如果提供两个地址,那么就是指定了命令执行的行范围。如果匹配不到第二个模式,则执行第一个模式的所有匹配(在本例中也就是删除所有匹配第一个模式的行)。
    50,$d : 它删除了从第50行开始到最后一行的所有行。
    1,/^$/d :它从第一行到第一个空行的所有行。可以混合使用行地址和模式地址。一旦匹配了第一个地址,这个动作就将应用于这些行,直到第二个地址被匹配。在本例中如果文件不包含空行那么将删除所有行。
 
    /^\.TS/,/^\.TE/!d : 跟在地址后面的感叹号是反转匹配的意思。
 
分组命令"{}"
 
    如果想指定行的范围,然后在这个范围内指定另一个模式匹配,则可以使用分组命令。
例如:为了只删除指定范围行中的空行可以使用下面的命令:
    /^\.TS/,/^\.TE/{/^$/d}
    可以使用大括号将编辑命令括起来对某个范围的行应用多个命令,如下所示:
    /^\.TS/,/^\.TE/{
        /^$/d
        s/^\.ps 10/.ps 8/
        s/^\.vs 12/.vs 10/
    }
 
   
测试并保存输出
 
    sed -f 命令文件名 testfile
    将所有的行输出屏幕(包括已修改或未修改的行)。
 
    sed -f 命令文件名 testfile > newfile
    重定向符号 > 将来自sed的输出直接送往文件newfile中。注意不要将命令的输出重定向到输入文件,否则会修改输入文件。甚至破坏你的数据。
 
    diff testfile newfile
    我们可以对newfile和testfile的内容作比较,这样可以很好的检查结果,可以使用diff程序指出两个文件之间的区别。
 
   
sed脚本的4中类型
 
    1.对同一文件的多重编辑
    编辑复杂的文本我们可以编写多个sed命令进行匹配修改,我们需要把多个命令放到一个文本文件里,每个命令占一行。利用 sed 命令的-f选项引入该命令文本。
    例如:把以下命令放到sed1.txt文件里
    s/^$/.LP/
    /^+  */d
    s/^  *//
    s/  */ /g
    利用sed命令的-f选项引入该命令文本:sed -f sed1.txt sedtest.txt
   
    2.改变一组文件
    sed最常见的用法是对一组文件进行一些列搜索和替换操作。
 
    3.提取文件的内容
    sed可以用-n 选项来阻止它打印整个文件。使用这个选项,sed只打印通过打印命令"p"显示指定的要打印的行。
    例如:
    sed -n "/aaaa/,/eeee/p" tset1.txt
    这两个模式匹配指定了打印命令p的行范围(从匹配字符串aaaa的行到字符串eeee的行内的所有行)。这就是sed与grep(不能匹配行的范围)的功能区别。
 
    4.生成提纲
    使用sed通过模式匹配替换可以生成文档的大纲视图。
 
使用sed的几个提示:
1.了解你的输入!在使用grep设计脚本之前,仔细检查输入文件。
2.建立测试文件,在测试文件上运行你的脚本并确信脚本能正常工作。
3.做之前要仔细考虑。仔细的测试你添加到脚本中的每个命令。比较输出和输入文件来看看发生了什么变化。亲自证明你的脚本是完整的。确定在输入文件正确的前提下,你的脚本确定可以正确的工作,而不仅仅是你认为可以。
4.要实用!尝试完成你用sed脚本可以完成的事,但不必100%完成这个工作。如果遇到困难的情况,检查并查看他们发生的频繁程度。有时也可以手动来完成剩下的几个编辑工作。

本文出自 “linux系列” 博客,转载请与作者联系!

你可能感兴趣的:(sed,命令使用)