Linux sed 命令详解

Linux sed(Stream Editor)是一种强大的文本处理工具,它在命令行中执行对文本进行搜索、替换和编辑等操作。sed的设计理念是按行处理文本,可以将输入文本逐行读取并应用指定的操作,然后输出结果。

sed命令有多种选项和功能,下面将详细介绍其常用的用法和实例。

  1. 替换文本:
    使用s/old/new/模式实现替换操作,将输入文本中的"old"字符串替换为"new"字符串。例如:

    $ sed 's/foo/bar/' input.txt
    

    这将把文件input.txt中的所有"foo"替换为"bar"。

    sed支持全局替换,只需在s/old/new/的第一个斜杠后加入g标志。例如:

    $ sed 's/foo/bar/g' input.txt
    

    这将替换所有出现的"foo"为"bar"。

  2. 删除行:
    使用d命令删除匹配模式的行。例如:

    $ sed '/pattern/d' input.txt
    

    这将删除文件input.txt中匹配模式"pattern"的所有行。

  3. 插入和追加文本:
    使用i命令在指定行前插入文本,使用a命令在指定行后追加文本。例如:

    $ sed '3i\This is line 3' input.txt
    

    这将在文件input.txt的第三行前插入文本"This is line 3"。

    $ sed '3a\This is line 4' input.txt
    

    这将在文件input.txt的第三行后追加文本"This is line 4"。

  4. 打印文本:
    使用p命令打印匹配模式的行。例如:

    $ sed -n '/pattern/p' input.txt
    

    这将打印文件input.txt中匹配模式"pattern"的所有行。

    如果想要打印所有行,可以使用以下命令:

    $ sed -n 'p' input.txt
    
  5. 文件编辑:
    使用-i选项实现原地编辑,即直接修改源文件而不产生新的输出文件。例如:

    $ sed -i 's/foo/bar/' input.txt
    

    这将直接在输入文件input.txt中将所有的"foo"替换为"bar"。

  6. 制定处理范围:
    可以使用行地址指定sed命令的处理范围。例如,使用数字表示行号:

    $ sed '2,5d' input.txt
    

    这将删除文件input.txt的第二行到第五行之间的内容。

    也可以使用正则表达式指定处理范围。例如,处理以"start"开始和以"end"结束之间的文本:

    $ sed '/start/,/end/d' input.txt
    

    这将删除文件input.txt中匹配模式"start"和"end"之间的文本。

  7. 多重编辑命令:
    可以使用分号将多个sed命令组合在一起。例如:

    $ sed 's/foo/bar/; s/abc/xyz/' input.txt
    

    这将先将文件input.txt中的所有"foo"替换为"bar",然后将所有"abc"替换为"xyz"。

    也可以将多个编辑命令写入一个脚本文件,并通过-f选项来执行。例如,将编辑命令存储在script.sed文件中:

    $ sed -f script.sed input.txt
    
  8. 指定行号进行操作:
    使用数字表示的行号(如1、2、3等)可以指定要对其进行操作的行。例如,以下命令将替换文件input.txt中的第二个"foo"字符串:

    $ sed '2s/foo/bar/' input.txt
    
  9. 引用特殊字符:
    在替换操作中,如果要引用包含特殊字符的字符串,可以使用反斜杠进行转义。例如,将"$100"替换为"$200"的命令如下:

    $ sed 's/\$100/\$200/' input.txt
    
  10. 根据正则表达式匹配和替换:
    可以使用正则表达式作为sed命令中的匹配模式。例如,替换所有以数字开头的行为空行:

    $ sed 's/^[0-9].*$/ /' input.txt
    
  11. 仅显示替换的行:
    使用-n选项可以禁止sed的默认输出,然后使用p命令打印匹配行。例如,只显示替换操作后的行:

    $ sed -n 's/foo/bar/p' input.txt
    
  12. 处理多个文件:
    使用多个文件名作为sed命令的参数,可以对多个文件进行批量处理。例如,将文件1.txt和2.txt中的所有"foo"替换为"bar":

    $ sed 's/foo/bar/' 1.txt 2.txt
    
  13. 反向引用匹配:
    使用正则表达式的捕获组和反向引用,可以在替换操作中使用匹配的内容。例如,将文件input.txt中的"a123b"替换为"b123a":

    $ sed 's/\(a\)\([0-9]\+\)\(b\)/\3\2\1/' input.txt
    
  14. 删除空白行:
    使用以下命令可以删除文件中的空白行:

    $ sed '/^\s*$/d' input.txt
    
  15. 执行脚本文件:
    创建一个包含sed命令的文本文件,并使用-f选项来执行该脚本文件。例如,将编辑命令存储在script.sed文件中并执行:

    $ sed -f script.sed input.txt
    

猜你喜欢

转载自blog.csdn.net/u012581020/article/details/132086084