Sed 笔记
命令格式
sed的命令格式:sed [options] 'command' file(s);
sed的脚本格式:sed [options] -f scriptfile file(s);
选项
- -e :直接在命令行模式上进行sed动作编辑,此为默认选项;
- -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
- -i :直接修改文件内容;
- -n :只打印模式匹配的行;
- -r :支持扩展表达式;
- -h或–help:显示帮助;
- -V或–version:显示版本信息。
sed常用命令
- a\ 在当前行下面插入文本;
- i\ 在当前行上面插入文本;
- d 删除,删除选择的行;
- s 替换指定字符;
sed替换标记
- g 表示行内全面替换;
- p 表示打印行;
- w 表示把行写入一个文件;
- x 表示互换模板块中的文本和缓冲区中的文本;
- y 表示把一个字符翻译为另外的字符(但是不用于正则表达式);
- \1 子串匹配标记;
- & 已匹配字符串标记;
举例
文本替换 s
# 其中s代表文本命令
sed 's/Canada/Canadian/' table
但是上面一行命令只会替换掉每行第一个匹配字符。
# 在结尾加入g,进行全面替换
sed 's/Canada/Canadian/g' table
# 如果在 g 标记前加入数字,则是从那一数字次匹配开始,进行替换
sed 's/Canada/Canadian/2g' table # 从第二次匹配开始替换
打印匹配行 n
# -n 命令要和 p 标记结合使用
root@***:~/shell/test# sed -n 's/Canada/Canadian/gp' table
| Canadian | CAN | Canadian | 34342780 | 34754312 |
删除操作 d
使用d命令可以删除匹配行
# 删除空白行
sed '/^$/d' table
# 删除特定行
sed '3d' table # 删除第三行
# 并且可以加入正则表达式进行匹配
sed '/.*China.*/d' table # 删除带China字段的行
已匹配字符串 &
& 可以代替已匹配的字符
# 在匹配到 Canada 的行左右加上“--[”、“]--”
root@***:~/shell/test# sed -n 's/.*Canada.*/--[&]--/gp' table
--[| Canada | CAN | Canada | 34342780 | 34754312 |]--
行范围选定 ,
逗号“,”选择两个匹配词中间的行
# 打印 Cambodia 到 China 中间的行
root@***:~/shell/test# sed -n '/^Cambodia/,/^China/p' table
Cambodia ---------------------------++++++++++++++++++///
| Canada | CAN | Canada | 34342780 | 34754312 |
| Central African Republic | CAF | 4349921 | 4436217 | 4525209 |
China ---------------------------++++++++++++++++++///
# 选择 Cambodia 到 China 中间的行,并把行尾替换成???
root@***:~/shell/test# sed -n '/^Cambodia/,/^China/s/$/???/p' table
Cambodia ---------------------------++++++++++++++++++???
| Canada | CAN | Canada | 34342780 | 34754312 |???
| Central African Republic | CAF | 4349921 | 4436217 | 4525209 |???
China ---------------------------++++++++++++++++++///???