sed
是一种强大的流编辑器,它在Unix和类Unix系统中广泛用于处理文本文件。以下是一些基本的用法和示例:
基本语法
# 单个命令行内编写命令
sed [选项] 'command' inputfile
# 使用-e参数添加多个命令
sed [选项] -e 'command1' -e 'command2' inputfile
# 从脚本文件读取命令
sed [选项] -f scriptfile inputfile
# 其中常用的选项包括:
- e, --expression= 后接一个编辑命令
- f, --file= 从指定文件中读取编辑命令
- i 直接修改原文件(默认不修改原文件,仅输出到标准输出)
- n, --quiet, --silent 只打印经过命令处理的行(静默模式)
常用命令及操作符:
删除行:
d
删除当前行5d
删除第5行/pattern/d
删除包含匹配pattern的行
替换:
s/old/new/
替换行中第一个出现的old为news/old/new/g
替换行中所有出现的old为news/old/new/gi
替换行中所有出现的old为new,并忽略大小写3,5s/old/new/g
在第3至第5行范围内替换old为new
插入:
a\text
在当前行后追加文本text3a\text
在第3行后追加文本text
插入(在行首):
i\text
在当前行前插入文本text
复制并打印行:
p
打印当前模式空间中的行(默认行为)p
在-n
静默模式下打印行
跳转:
t label
如果上一条命令替换成功,则跳转到label标签b label
不论上一条命令是否成功都跳转到label标签
读取外部文件内容:
r file
在当前行后读取并插入file的内容
写入文件:
w file
将当前行写入到file中
示例:
删除每一行以'#'开始的注释:
sed '/^#/d' inputFile.txt
将每一行中的"apple"替换为"banana":
sed 's/apple/banana/g' inputFile.txt
在每一行末尾添加字符串 ".end" 并保存更改到原文件:
sed -i '$ s/$/.end/' inputFile.txt
插入一行 "New Line" 在文件的第二行:
sed '2i\\New Line' inputFile.txt
以上仅为简单示例,sed
的功能远不止于此,它可以结合正则表达式进行复杂的数据流编辑。