zoukankan      html  css  js  c++  java
  • Sed命令的使用详细解释

    Sed命令的使用详细解释

    一:sed命令的简介

    sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

     
     

    二:Sed的用法格式

    Sed [options] ‘scripts’ inputfile

    sed ‘pattern’ inputfile

    pattern:中也可以有sed的子命令command,

    另外强大的sed还支持正则表达式,和扩展正则表达式

    三:sed命令常用[options]选项

    • -n选项: quiet,silent,静默模式,不打印模式空间中的内容,而是仅打印和sed命令匹配的内容

                suppress automatic printing of pattern space。

                比如:sed -n ‘1,2p’ passwd

                再如Sed ‘1,2p’ /etc/passwd

    • -f:选项 sed -f filename

               把sed要处理的命令写到一个文件中,使用-f选项

    • -i选项:直接对源文件进行操作。
    • -e选项:sed -e scripts或者expression

              说明:-e选项可以支持sed进行多点编辑处理,使用多个scripts或者expression时,之间使用;分号隔开。

             比如:

    四: sed命令的pattern说明

    Pattern中的格式:

    ①addr1 ,addrN/command (ddr1,addrN也可以是模式)

    例如:打印 sed.txt文本中的第1行和第2行。

    ②在pattern中相关的子命令command

    d:删除指定 的行

    例如删除sed.txt 文本中的前两行。

    p:模式空间中的文本在处理之前,每一次都会先显示

    Print the current pattern space

    a :在模式匹配到的行后面添加新的内容。

    例如:在以#号开头的行的下一行添加两行 在行之间换行。

    i  :在模式匹配到的行前面添加新的内容。

    例如:在以#开头的行的上一行添加一行。

    :表示对command的匹配范围取反

    例如下面的例子,表示除了以#开通的行外,其他行都在其上面添加一行信息,一定要注意的是!号是对其前面的要匹配的范围取反。

    再例如显示sed.txt 中前两行

    ⑹ 在数据流重定向中,我们把一个文件追加到另外一个文本中,只能追加到另一个文本的末尾,但是使用sed可以在另外一个文本添加到其他地方

    例如将sed2.txt中的内容追加到sed.txt文本中的第13行后面。

    另外还可以匹配模式,例如将sed2.txt中的内容追加到sed.txt文本中以#开通的行后面。

    w:把匹配到的内容写入到某个地方

    例如:将sed.txt中以#开通的行 以覆盖的方式写入到/root/sed2.txt文本中。

    s:s/模式/sting/g [i]: s的使用类似在vim编辑器中的末行模式中的使用。

    参数g,利用模式匹配到的内容,用sting替换。i参数在模式匹配的过程中不区分大小写。或者是s@模式@sting/g ,或者是s%模式%sting/g等等具体情况,具体对待吧!!

    比如:把sed.txt中开通是?的行,替换成字符串how ate you?

    &符号的引用功能:&符号可以引用前面匹配到的内容

    例如: 将sed.txt中以th开头,后跟两个字符的单词后面添加OO

    关于引用的另外一个用法:示例同上将sed.txt中以th开头,后跟两个字符的单词后面添加OO

     n (N):Read/append the next line of input into the pattern space

    例如

    通过上面两个例子的对比我们不难发现:小写字母n的使用方法,n是覆盖方式的输入。

    大写N则是以追加的方式输入

    n与d一起使用的妙用

     h(H)与g(G)的使用方法。

    h: Copy pattern space to hold space:将模式空间中的内容复制到保留空间,覆盖方式进行

    H: append pattern space to hold space:将模式空间中的内容覆盖到保留空间,追加方式进行

    g: Copy hold space to pattern space:将保留空间中的内容复制到模式空间,覆盖方式进行

    G: append hold space to pattern space:将保留空间中的内容复制到模式空间,追加方式进行

    例如:

    ⑿sed 命令中的替换

    y/source/dest/

    例如:将sed.txt文本中的小写t和h,换成相应的大写T,H。

    ⒀ b:跳转:跳过某些符合的条件

    例如

    参考以上例子:将sed.txt文本中的小写t和h,换成相应的大写T,H。但是跳过以#号开通的行

    ⒁ :lable 在sed命令处理的过程中做标记(备注:lable可以是自己定义的标记)

    这个做标记怎么使用呢?听起来有点迷茫,不过请看下面的里面

    还是参考上面的例子,例如在sed.txt文本中将在非#号开通的行中a 换成大写的B,将以#开头的行中的 a 换成大写的A

    转自:http://haicang.blog.51cto.com/2590303/901639

  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/BinBinStory/p/7282789.html
Copyright © 2011-2022 走看看