sed
sedsed 是一个流编辑器(Stream EDitor)。流编辑器对输入流(文件或者是来自于管道的输入)进行基本的文件转换
# base
sed 命令的一般语法是: sed OPTIONS... [SCRIPT] [INPUTFILE...]. 其中 OPTIONS 是命令行选项, SCRIPT 是 sed 的编辑脚本, 可以是一个或多个命令, INPUTFILE 是要处理的输入文件
# OPTIONS
-i: This tells sed to edit files in place, rather than outputting the modified text to the console.- 在 macOS 上使用
-i ''表示不创建备份文件;在 Linux 上可以直接使用 -i
- 在 macOS 上使用
-n: 抑制自动输出
# mode
s: 替换, 规则s/PATTERN/REPLACEMENT/FLAGS. FLAGS 是可选的标志, 例如g表示全局替换sed -E 's/\[//g; s/\]//g': 多规则替换。这里表示替换[和]为空字符串sed 's/foo/bar&/' text.txt: 在 foo 前面直接加 bar。 这里的&: 表示当前匹配到的字符串
d: 删除模式sed '/foo/d' text.txt: 删除文本中所有包含 "foo" 的行
i: 在匹配模式前插入一行文本sed '/foo/i\bar' text.txt
a: 用于在匹配模式后追加一行文本sed '/foo/a\bar' text.txt
p: 用于打印匹配模式的行sed -n '1p' url.txt: 只打印第一行sed -n '/foo/p' text.txt
# &
表示当前匹配到的字符串
# POSIX sed 规则
[a-zA-Z0-9][a-zA-Z0-9]* 匹配一个或多个字母或数字。这是标准 sed 中的等价表达方式,不依赖扩展语法.
# 注意
- 正则的限制
\w在 sed 中的使用需要特定的扩展模式支持,如GNU sed的 -E 或 -r 选项. 见下面 gsed
- 遵循
POSIX sed规则。 sed 版本不支持\+.
echo "hello world" | sed 's/[a-zA-Z0-9][a-zA-Z0-9]*/(&)/g'
# GUN sed
GUN sed 对 POSIX sed 进行了一些扩展。 支持扩展正则表达式,可通过 brew install gnu-sed 安装 GNU sed. 这将确保你在使用 GNU sed 时可以正常运行扩展正则表达式. 如下:
-> % echo "hello world" | gsed -E 's/\w+/(&)/g'
(hello) (world)
1
2
2
# link
上次更新: 2024/12/01, 17:09:08