sed
是一个流编辑器,用于对文本进行基本的转换和处理。以下是 sed
命令的所有选项及其功能的详细说明,并附带示例和注释:
基本用法
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
选项说明
-
-n, --quiet, --silent
:抑制自动打印模式空间。sed -n 's/foo/bar/p' file.txt # 只打印替换了 'foo' 的行,不打印其他行
-
-e script, --expression=script
:将script
添加到要执行的命令中。sed -e 's/foo/bar/' file.txt # 执行替换操作,将 'foo' 替换为 'bar'
-
-f script-file, --file=script-file
:将script-file
的内容添加到要执行的命令中。sed -f script.sed file.txt # 从 script.sed 文件中读取 `sed` 脚本并执行
-
--follow-symlinks
:处理文件时跟随符号链接。sed --follow-symlinks -i 's/foo/bar/' file.txt # 替换文件中的 'foo' 为 'bar',处理符号链接
-
-i[SUFFIX], --in-place[=SUFFIX]
:就地编辑文件(如果提供了 SUFFIX,则创建备份)。sed -i.bak 's/foo/bar/' file.txt # 替换文件中的 'foo' 为 'bar',并创建备份 file.txt.bak
-
-c, --copy
:在-i
模式下使用copy
代替rename
。sed -i -c 's/foo/bar/' file.txt # 替换文件中的 'foo' 为 'bar',使用 copy 而非 rename
-
-b, --binary
:在兼容 WIN32/CYGWIN/MSDOS/EMX 时打开文件为二进制模式(在现代系统中无效)。sed -b 's/foo/bar/' file.txt # 以二进制模式处理文件(通常不需要)
-
-l N, --line-length=N
:指定l
命令的所需行长度。sed -l 80 'l' file.txt # 使用 `l` 命令以 80 个字符的宽度打印文件
-
--posix
:禁用所有 GNU 扩展。sed --posix 's/foo/bar/' file.txt # 使用 POSIX 标准,禁用 GNU 扩展
-
-r, --regexp-extended
:在脚本中使用扩展正则表达式。sed -r 's/(foo|bar)/baz/' file.txt # 使用扩展正则表达式将 'foo' 或 'bar' 替换为 'baz'
-
-s, --separate
:将文件视为分开的,而不是作为一个连续的长流。sed -s 's/foo/bar/' file1.txt file2.txt # 将 file1.txt 和 file2.txt 视为独立文件处理
-
-u, --unbuffered
:从输入文件加载最小数据量,并更频繁地刷新输出缓冲区。sed -u 's/foo/bar/' file.txt # 处理文件时使用最小缓冲
-
-z, --null-data
:使用 NUL 字符分隔行。sed -z 's/foo/bar/' file.txt # 使用 NUL 字符分隔文件中的行(适用于二进制数据)
-
--help
:显示帮助信息。sed --help # 显示 `sed` 的帮助信息
-
--version
:输出版本信息。sed --version # 显示 `sed` 的版本信息
示例
-
基本替换:将文件中的
foo
替换为bar
。sed 's/foo/bar/' file.txt # 将文件中的 'foo' 替换为 'bar'
-
就地编辑:直接在文件中替换
foo
为bar
,并备份原文件。sed -i.bak 's/foo/bar/' file.txt # 替换 'foo' 为 'bar',并创建备份 file.txt.bak
-
从文件读取脚本:从
script.sed
文件中读取sed
脚本。sed -f script.sed file.txt # 从 script.sed 文件中读取 `sed` 脚本并执行
-
使用扩展正则表达式:使用扩展正则表达式将
foo
或bar
替换为baz
。sed -r 's/(foo|bar)/baz/' file.txt # 使用扩展正则表达式将 'foo' 或 'bar' 替换为 'baz'
-
逐行处理:使用
-n
和p
命令仅打印包含foo
的行。sed -n '/foo/p' file.txt # 只打印包含 'foo' 的行
-
处理 NUL 字符:将文件的 NUL 分隔行转换为换行符。
sed -z 's/\x00/\n/g' file.txt # 将 NUL 字符替换为换行符