sed 是一种非交互式的文本编辑器,常用于处理文本文件。它可以对文本文件进行替换、删除、添加、查找等操作。在本文中,我们将介绍 sed 的用法及其应用场景。

1. 替换文本中的某个字符串

sed 可以用于替换文本中的某个字符串。例如,我们要将文本文件 filename 中所有的 oldstring 替换成 newstring,可以使用以下命令:

sed -i 's/oldstring/newstring/g' filename

其中,-i 选项表示直接在原文件中进行修改(in-place editing),s/oldstring/newstring/g 表示将 filename 文件中所有的 oldstring 字符串替换成 newstring

s/oldstring/newstring/flags

其中:

  • oldstring 表示要被替换的字符串;
  • newstring 表示替换后的字符串;
  • flags 表示替换标志,常用的标志有 gi
    • g 表示进行全局替换(global),即一个行中有多个匹配字符串时都进行替换;
    • i 表示进行不区分大小写的替换(ignore case),即在匹配字符串时忽略大小写。

例如,s/DB_URL/$DB_URL/g 命令表示将文本中所有出现的 DB_URL 字符串替换成 $DB_URL 变量所代表的值,并且进行全局替换(即一个行中有多个 DB_URL 字符串时都进行替换)。

2. 删除文本中的某行或多行

sed 还可以用于删除文本中的某行或多行。例如,我们要将文本文件 filename 中第 N 行或第 N 行到第 M 行删除,可以使用以下命令:

sed -i 'Nd' filename

sed -i 'N,Md' filename

其中,d 表示删除操作。

3. 在指定行后添加一行或多行

sed 还可以用于在文本中指定行后添加一行或多行。例如,我们要在文本文件 filename 中第 N 行或第 N 行到第 M 行后添加 newstring,可以使用以下命令:

sed -i 'N a\newstring' filename

sed -i 'N,M a\newstring' filename

其中,a 表示添加操作。

4. 在指定行前添加一行或多行

sed 还可以用于在文本中指定行前添加一行或多行。例如,我们要在文本文件 filename 中第 N 行或第 N 行到第 M 行前添加 newstring,可以使用以下命令:

sed -i 'N i\newstring' filename

sed -i 'N,M i\newstring' filename

其中,i 表示插入操作。

5. 删除文本中某个字符串所在行的所有内容

sed 还可以用于删除文本中某个字符串所在行的所有内容。例如,我们要删除文本文件 filename 中包含 oldstring 的行及其所有内容,可以使用以下命令:

sed -i '/oldstring/d' filename

6. 在文本中查找某个字符串并显示其所在行

sed 还可以用于在文本中查找某个字符串并显示其所在行。例如,我们要在文本文件 filename 中查找包含 searchstring 的行,并显示这些行的内容,可以使用以下命令:

sed -n '/searchstring/p' filename

其中,-n 选项表示不输出匹配行之外的内容,/searchstring/p 表示查找包含 searchstring 的行并输出其内容。

7. 在指定行后插入一个文件中的内容

sed 还可以用于在文本中指定行后插入一个文件中的内容。例如,我们要在文本文件 filename 中第 N 行或第 N 行到第 M 行后插入文件 insert_file 中的内容,可以使用以下命令:

sed -i 'N r insert_file' filename

sed -i 'N,M r insert_file' filename

其中,r 表示读取操作。

8. 将文本中某个字符串替换成另一个文件中的内容

sed 还可以用于将文本中某个字符串替换成另一个文件中的内容。例如,我们要将文本文件 filename 中的所有 oldstring 替换成文件 replace_file 中的内容,可以使用以下命令:

sed -i '/oldstring/r replace_file' filename

其中,r 表示读取操作。

9. 执行多个操作

我们还可以在一个 sed 命令中执行多个操作。例如,我们要将文本文件 filename 中的所有 oldstring 替换成 newstring 并将结果输出到 output_file 中,可以使用以下命令:

sed -e 's/oldstring/newstring/g' filename > output_file

其中,-e 选项表示执行多个操作。

10. 正则表达式

sed 中使用正则表达式可以更灵活地进行文本处理。例如,我们要将文本文件 filename 中所有以 abc 开头的行删除,可以使用以下命令:

sed -i '/^abc/d' filename
Logo

更多推荐