sed 命令详细用法
sed
是一个流编辑器,用于在命令行中执行文本处理和转换操作。sed
命令特别适合通过模式匹配进行文本过滤和替换。以下是 sed
命令的一些详细用法和示例:
基本语法
sed [options] 'command' file(s)
常用选项
-n
:取消默认输出。默认情况下,sed
会自动输出每行。使用-n
后需要手动指定输出。-i
:直接修改文件而不是输出到标准输出。-e
:允许以脚本形式执行多个命令。-f
:从指定的文件中读取sed
脚本。
常用命令
p
:打印模式空间的内容。d
:删除模式空间的内容。s
:替换命令,格式为s/pattern/replacement/flags
。
替换命令
s/old/new/
:将每一行中首次出现的old
替换为new
。s/old/new/g
:将每一行中所有出现的old
都替换为new
。s/old/new/3
:仅替换每一行中第三次出现的old
。s/old/new/gp
:替换并打印替换后的内容。
匹配和地址
sed '1d'
:删除第一行。sed '1,5d'
:删除第一到第五行。sed '/pattern/d'
:删除包含匹配pattern
的行。
组合命令
sed '3,5s/foo/bar/g'
:在第3到第5行中,将foo
替换为bar
。sed '1,5{ s/foo/bar/; s/baz/qux/; }'
:在第1到第5行中,将foo
替换为bar
,并将baz
替换为qux
。
多行文本
- 使用换行符
\n
可以操作多行文本,但sed
默认是逐行操作的。使用N
命令可以将下行读取到模式空间,例如:
sed '/pattern/{N;s/foo\nbar/baz/}' file.txt
其他示例
- 删除空行:
sed '/^$/d' file.txt
- 替换开头和结尾的空白字符:
sed 's/^[ \t]*//;s/[ \t]*$//' file.txt
注
sed
使用的正则表达式是基本正则表达式(BRE),支持部分扩展正则表达式(ERE)的功能,但需要使用 -E
选项。有时复杂操作或者跨行处理可能更适合用 awk
或 perl
等工具。
通过结合使用 sed
的命令和选项,可以实现复杂的文本处理任务。牢记 sed
处理的是流(stream),这使得它可以高效地处理大文件。
学习sed真的很有趣,尤其是它强大的替换功能。对于处理日志文件时,能快速筛选和替换内容如:
sed的功能强大,适合处理大数据量的文本。我常使用
-n
选项来精确控制输出,比如:尤其是处理多行文本时,
N
命令很有用。这样的使用很方便:对于删除空行的功能,
sed '/^$/d'
非常有用,适合清理不必要的行,保持文件整洁。在脚本处理时,
-i
选项让我可以直接修改文件,不用多次重定向,提升了效率!用sed进行批量替换时,组合命令也很实用,可以一次性完成多个替换,像这样:
sed的正则表达式功能也很不错,虽然是基本正则,但配合使用非常方便。使用
-E
选项可以进行扩展正则匹配。对于处理字符串前后的空白字符,
sed 's/^[ ]*//;s/[ ]*$//'
非常有效,保持数据整洁。我在数据处理时经常用到sed,尤其是读取脚本文件执行时,使用
-f script.sed
便捷高效。sed掌握后,文本处理效率大幅提升。不妨尝试结合awk,一起使用处理复杂文本数据。