sed 简介
sed 是一种流文本编辑器,用于读取指定文件或标准输入。
如果没有文件被指定,可由命令列表来指定输入,进行相应修改后写入到标准输出。
本文后续内容以skyline.txt示例,可在根目录执行下述脚本。
其文本内容为
test |
选项参数
-n
默认情况下,在所有的标准输出都会被打印到屏幕上。 -n 选项用于指定输出内容。
# 输出1到3行 |
连续的行数用逗号隔开。
-e
-e 是编辑命令,用于执行多个编辑任务。
sed -e '1,2d' -e 's/skyline/lty/g' Demos/Major/Shell/skyline.txt |
skyline.txt 将依次执行之后的命令,删除 1 到 2 行,并且全局替换’skyline’为’lty’
上述操作不会影响 skyline.txt 源文件,只做标准输出,可使用>将结果重定向到另一个文件。
-i
-i 指定备份
可指定字符后缀为备份文件
# 指定会在skyline.txt同级目录生产skyline.txt.bak备份,skyline.txt内容将会变更 |
指定空字符串或不指定内容直接修改源文件(linux 下可以不指定,mac 下需指定空字符)
sed -i '' 's/skyline/lty/g' Demos/Major/Shell/skyline.txt |
sed -i 's/skyline/lty/g' Demos/Major/Shell/skyline.txt |
命令参数
i/a
i 与 a 都是插入参数,后面可以接字串,用 a 插入的字串会在行的下一行行首出现,用 i 插入的字串会在当前行的行首。
插入的字符用\隔开,注意,在 mac 下\后需要换行
# Mac/Linux |
d
- 简单使用
删除命令,之后不接内容。
sed -i '' '1,3d' Demos/Major/Shell/skyline.txt |
- 使用正则
删除空行
# 删除文件中的空行 |
删除有匹配成功对应的行
sed -i '' '/skyline/d' Demos/Major/Shell/skyline.txt |
删除有匹配成功对应的行
sed -i '' '/^skyline$/d' Demos/Major/Shell/skyline.txt |
删除特殊匹配的行
# 删除有空格的行 |
p
标准输出内容
# 输出1到3行 |
s/c
使用 s/c 来替换部分内容。
这个 s 通常搭配正则表达式, c 通常替换指定行。
替换行
# 替换1到5行的内容为lalala |
替换文本
sed -i '' 's/skyline/lty/g' Demos/Major/Shell/skyline.txt |
通过’/原文本/替换文本/‘来指定替换,分隔符号为’/‘,当文本中包含分隔符时,可以使用其他符号来指定分隔符。
例如原文本为’skyline/‘,替换文本为’lty-‘,可以使用
sed -i '' 's%skyline/%lty-%g' Demos/Major/Shell/skyline.txt |
也可以使用转义符
sed -i '' 's/skyline\//lty-/g' Demos/Major/Shell/skyline.txt |
转义符方案除了用于’/‘,原文本包含’[‘’]’等字符也需使用。
常见用法
文末插入
注意 mac 下\后需要换行
sed -i '' '$a\skyline' skyline.txt |
替换字符
替换第 n 个匹配的字符
echo sksksksksksk | sed 's/sk/SK/3' |
获取行数
输出文件行数
|
获取字符行号
输出文件第 n 个匹配字符所在行号
# 输出所有skyline的行号 |
BMW WARNING
- Bulletin
本文首发于 skyline.show 欢迎访问,
文章实时更新,如果有什么错误或不严谨之处望请指出,十分感谢。
如果你觉得有用,欢迎到Github仓库点亮⭐️。
I am a bucolic migrant worker but I never walk backwards.
- Material
参考资料如下列出,部分引用可能遗漏或不可考,侵删。
- Warrant
本文作者: Skyline(lty)
授权声明: 本博客所有文章除特别声明外, 均采用 CC BY - NC - SA 3.0 协议。 转载请注明出处!