sed
(Stream Editor)是 Linux 系统中一个强大的流式文本编辑器,它可以对文本进行替换、删除、插入、选取等操作,并且可以在不修改原始文件的情况下输出处理后的结果,也可以直接修改文件内容。以下是 sed
的详细用法及示例:
sed [选项] '命令' 文件
-i表示直接修改文件内容
1. 替换操作
使用 s
命令进行替换,语法为 s/原字符串/新字符串/修饰符
,其中修饰符常见的有 g
(全局替换)。sed
的替换命令 s
并不强制要求使用 /
作为分隔符,你可以选择其他字符作为分隔符,例如 #
、|
、@
等。
# 将每行的第一个"red" 替换为 "green"
sed 's/red/green/' data.txt
# 输出结果
apple is green
banana is yellow
cherry is green
# 使用 g 修饰符,将每行中所有的 "red" 替换为 "green"
sed 's/red/green/g' data.txt
# 使用 # 作为分隔符进行替换
sed 's#http://example.com#https://newexample.com#' test.txt
如果要直接修改文件内容,可以使用 -i
选项:
sed -i 's/red/green/g' data.txt
结合正则表达式进行替换
sed 's/[0-9]\+/99/g' data.txt
#[0-9]\+ 表示匹配一个或多个数字。
sed 's/like\(s\)\?/love/g' data.txt
#like\(s\)\? 表示匹配 "like" 或者 "likes"。
2.删除操作
使用 d
命令删除指定的行。
# 删除包含 "banana" 的行
sed '/banana/d' data.txt
删除指定范围的行
# 删除从包含 "Start" 的行到包含 "End" 的行
sed '/Start/,/End/d' data.txt
删除空行
sed '/^$/d' data.txt
/^$/ 是一个正则表达式,用于匹配空行(行的开头 ^ 紧接着行的结尾 $)。
删除以特定字符开头的行
# 删除以 # 开头的行
sed '/^#/d' data.txt
3. 插入操作
若要直接修改原文件,可以使用 -i
选项。如无,则在工作台上打印出内容。使用 a/i
命令在指定行之后/前插入文本。
sed '2i\new line' test.txt
# 在包含 "banana" 的行之后插入 "extra line"
sed '/banana/a extra line' data.txt
插入多行文本
插入多行文本时,每行之间用反斜杠 \ 分隔。例如在指定行号前插入多行:sed '行号i\第一行文本\第二行文本' 文件名
sed '2i\first new line\second new line' test.txt
若要直接修改原文件,可以使用 -i
选项。
sed -i '2a\new line' test.txt
结合正则表达式插入
在 test.txt 文件中以 l 开头的行后插入 inserted line,命令如下:
sed -i '/^l/a\inserted line' test.txt
4.选取操作
在 sed
命令里,-n
选项和 p
命令经常配合使用。-n为抑制输出。p为输出。默认情况下,sed
会将处理的每一行都输出到标准输出。而使用 -n
选项后,sed
不会自动输出每一行,只有在明确指定输出时才会输出内容。
# 输出包含 "Line 3" 的行
sed -n '/Line 3/p' data.txt
# 输出包含 "Line" 或者 "Text" 的行
sed -n '/Line\|Text/p' data.txt
# 输出以 "Line" 开头的行
sed -n '/^Line/p' data.txt
# 输出以 "!" 结尾的行
sed -n '/!$/p' data.txt