简介
- sed命令
linux sed命令 详解
sed
(流编辑器)是一个在命令行中使用的文本处理工具,用于对文本流进行过滤和转换。它通常用于从输入文本中选择、删除、替换文本,以及对文本进行其他一些操作。以下是sed
命令的一些常见用法和选项的详解:
基本语法:
1
sed [选项] '脚本' 文件
常用选项:
-n
:抑制默认的输出,只输出经过编辑的行。-e
:指定要执行的编辑命令。-f
:从文件中读取编辑脚本。-i
:直接修改文件内容,而不是输出到标准输出。
基本编辑命令:
- 替换文本:
1
sed 's/old_text/new_text/' file.txt
这将在
file.txt
中查找并替换第一次出现的old_text
。 - 全局替换:
1
sed 's/old_text/new_text/g' file.txt
使用
g
标志进行全局替换,替换每一处匹配。 - 删除行:
1
sed '/pattern/d' file.txt
删除包含指定模式的行。
- 打印行:
1
sed -n '2p' file.txt
打印文件中的第二行。
- 打印指定范围的行:
1
sed -n '2,5p' file.txt
打印文件中的第2到第5行。
- 在指定行之前或之后插入文本:
1
sed '2i\inserted_text' file.txt
在第2行之前插入文本。
1
sed '2a\appended_text' file.txt
在第2行之后追加文本。
- 使用正则表达式:
1
sed '/^pattern/s/old_text/new_text/' file.txt
仅在以
pattern
开头的行中替换old_text
。 - 多个编辑命令:
1
sed -e 's/old/new/' -e 's/another/replace/' file.txt
执行多个编辑命令。
- 从文件读取编辑脚本:
1
sed -f script.sed file.txt
script.sed
包含一系列sed
编辑命令。 - 将结果写入文件:
1
sed 's/old/new/' file.txt > new_file.txt
将结果输出到新文件。
这只是sed
的一些基本用法,它还有更多高级的功能和选项。查阅sed
的手册页(man sed
)以获取更详细的信息。
linux sed命令 常用技巧
sed
是一个非常强大的文本处理工具,下面是一些在使用sed
时常用的一些技巧:
-
使用正则表达式:
sed
支持正则表达式,可以在模式匹配时灵活应用。例如,使用.*
匹配任意字符。1
sed 's/^.*pattern.*$/replacement/' file.txt
-
引用变量: 可以在
sed
命令中使用变量,但是需要小心引号的使用,以确保变量被正确解释。1 2
my_var="pattern" sed "s/$my_var/new_text/" file.txt
-
在匹配行之前或之后添加文本: 使用
i
在匹配行之前插入文本,使用a
在匹配行之后追加文本。1 2
sed '/pattern/i\inserted_text' file.txt sed '/pattern/a\appended_text' file.txt
-
使用变量删除行: 使用变量作为删除条件,可以动态指定要删除的内容。
1 2
delete_var="pattern" sed "/$delete_var/d" file.txt
-
逆序打印文件: 使用
-n
抑制默认输出,然后使用p
打印行。1
sed -n '1!G;h;$p' file.txt
-
删除空白行: 删除文件中的空白行,包括只包含空格或制表符的行。
1
sed '/^\s*$/d' file.txt
-
使用变量替换定界符: 如果模式或替换文本中包含斜杠(
/
),可以使用其他定界符替代。1
sed "s|/old/|new|" file.txt
-
只处理文件的部分行: 使用行号范围限定
sed
的操作范围。1
sed '10,20s/old/new/' file.txt
-
反向引用匹配组: 在替换文本中使用
\1
、\2
等引用匹配组。1
sed 's/\(pattern1\)\(pattern2\)/\2\1/' file.txt
-
使用
-i
选项直接修改文件: 使用-i
选项可以直接在原文件上修改,但请小心使用,确保备份数据。1
sed -i 's/old/new/' file.txt
这些技巧只是sed
的冰山一角。要深入了解,建议查看sed
的文档和手册页(man sed
)。
linux sed命令 高级技巧
以下是一些在使用sed
时的高级技巧,这些技巧可以更灵活地处理文本:
-
使用地址范围: 定义
sed
的操作范围,可以是行号范围,也可以是正则表达式匹配的范围。1 2
sed '10,20s/old/new/' file.txt sed '/start/,/end/s/old/new/' file.txt
-
使用命名标签: 使用
b
命令和标签来进行跳转,可以提高脚本的可读性和复用性。1
sed ':label /pattern/ { s/old/new/; b label; }' file.txt
-
处理多行模式空间:
N
命令可以将下一行追加到模式空间中,使用\n
表示换行。1
sed 'N;s/\n/ /' file.txt
-
保留匹配行之外的内容: 使用
!
来反转匹配,保留非匹配行。1
sed '/pattern/!s/unwanted_text/new_text/' file.txt
-
只处理匹配的部分: 使用匹配组来保留或替换匹配的部分。
1
sed 's/\(start_pattern\)keep_this_part\(end_pattern\)/\1replace_this_part\2/' file.txt
-
使用
h
和H
保存和追加到保持缓冲区: 将匹配的行保存到保持缓冲区,使用h
,将下一行追加到保持缓冲区,使用H
。1
sed -n '/pattern/{h;};/next_pattern/{H;x;p;}' file.txt
-
自定义分隔符: 可以使用不同的分隔符,以避免在正则表达式中转义斜杠。
1
sed 's|/old/|new|' file.txt
-
执行
sed
脚本: 将sed
脚本保存到文件中,并通过-f
选项执行。1
sed -f script.sed file.txt
-
在指定行数插入或删除行: 使用
sed
在指定行数之前或之后插入行,或者删除指定行。1 2 3
sed '2i\inserted_line' file.txt sed '2a\appended_line' file.txt sed '2d' file.txt
-
逐行处理: 使用
sed
逐行处理文件,对每一行执行命令。1
sed -e 's/old/new/' -e 'p' file.txt
这些高级技巧可以使sed
更加强大和灵活,但也需要谨慎使用,以确保正确处理文本数据。深入了解sed
的文档和手册页对于理解和应用这些技巧非常有帮助。
sed
- sed, 利用脚本来处理文本文件,主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等
- sed [-hnV] [-e
- 参数说明
-e<script>
: 以选项中指定的script来处理输入的文本文件-f<script 文件>
:以选项中指定的script文件来处理输入的文本文件-h
: 显示帮助-n
: 仅显示script处理后的结果
- 动作说明
a
: 新增,a的后面可以接字符串,这些字符串会在新的一行出现(目前的下一行)c
: 取代,c的后面可以接字符串,这些字符串可以取代n1, n2之间的行d
: 删除,因为是删除,所以d后面通常不接任何东西i
: 插入,i的后面可以接字符串,而这些字符串会出现在新的一行(目前的上一行)p
: 打印,将某个选择的数据打印s
: 取代,可以直接进行取代的工作,通常搭配正则表达式
在Linux中,sed
命令是一种流编辑器,用于对文本进行流式处理和转换。它读取输入文本的每一行,根据指定的规则进行模式匹配和替换操作,并将处理后的文本输出到标准输出或指定的文件中。
以下是sed
命令的一般语法:
1
sed [options] 'command' input_file
其中,options
是可选的一些选项,command
是要执行的sed
命令,input_file
是要处理的输入文件。
以下是一些常见的sed
命令选项和用法:
- 替换文本:
1
sed 's/pattern/replacement/' input_file
此命令将输入文件中的每一行,将匹配
pattern
的内容替换为replacement
。 - 删除行:
1
sed '3d' input_file
此命令将删除输入文件中的第三行。
- 使用正则表达式进行匹配:
1
sed -n '/pattern/p' input_file
此命令将仅打印匹配正则表达式
pattern
的行。
sed
命令还支持其他一些高级功能,如全局替换、插入、追加和删除文本行,条件执行等。您可以使用不同的sed
命令和选项来完成各种文本处理任务。
请注意,sed
命令是一种非交互式的编辑器,它将按照指定的命令对输入文本进行处理,并将结果输出到标准输出或指定的文件中。它不会修改原始文件,除非您使用重定向符号(>
)将输出重定向到原始文件。