sed命令
命令格式
sed [options] ‘{command}’ [filename]
sed [options] -f scriptfile [filename]
选项
常用选项 | 选项说明 |
---|---|
sed -n | 抑制自动输出 |
sed -e | 添加脚本 |
sed -f | 添加脚本文件 |
sed -i | 编辑文件内容 |
sed -n | 抑制自动输出 |
sed -i.bak | 修改文件同时创建.bak备份文件 |
sed -r | 使用扩展的正则表达式 |
常用命令参数 | 参数说明 |
---|---|
a | 在匹配后面添加 |
d | 删除 |
i | 在匹配前面添加 |
s | 查找替换 |
p | 打印 |
y | 转换 |
h H | 拷贝/添加模式空间到存放空间 |
g G | 拷贝/添加存放空间到存放空间 |
指令参数
a\ 当前行下面插入文本。
i\ 在当前行上面插入文本。
c\ 把选定的行改为新的文本。 d 删除,删除选择的行。 D 删除模板块的第一行。 s 替换指定字符 h
拷贝模板块的内容到内存中的缓冲区。 H 追加模板块的内容到内存中的缓冲区。 g 获得内存缓冲区的内容,并替代当前模板块中的文本。
G 获得内存缓冲区的内容,并追加到当前模板块文本的后面。 l 列表不能打印字符的清单。 n
读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。 N 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p 打印模板块的行。 P (大写)打印模板块的第一行
^ 行的开始
$ 行的结尾
. 一个字符
- 0个或多个前一个字符
[] 方括号中的所有字符
{} 重复次数
() 组
/./ 匹配至少有一个字符的行
/…/ 匹配至少有两个字符的行
/^#/ 匹配用#开头的行
/^KaTeX parse error: Expected 'EOF', got '}' at position 12: / 匹配空行 /}̲/ 匹配用}结尾的行(没有空格在后面)
/}*$/ 匹配用}结尾的行(可以有空格在后面)
/[abc]/ 匹配小写的 a或b或c
/^[abc]/匹配开头不是小写的a或b或c
sed命令小练习
打印操作:p命令
sed -n '5’p /etc/passwd
sed -n '1,5’p /etc/passwd
sed -n '1, ′ p / e t c / p a s s w d s e d − n ′ / r o o t / ′ p / e t c / p a s s w d s e d − n ′ / 1 / ′ p / e t c / p a s s w d s e d − n ′ i n 'p /etc/passwd sed -n '/root/' p /etc/passwd sed -n '/^1/'p /etc/passwd sed -n 'in ′p/etc/passwdsed−n′/root/′p/etc/passwdsed−n′/1/′p/etc/passwdsed−n′in'p /etc/passwd
sed -n '/r…o/'p /etc/passwd
sed -n '/oo*/'p /etc/passwd
sed -e '1’p /111/'p -n /etc/passwd
删除操作:d命令
cat class1
zhoujielun 85 87
chenglong 87 88
liubei 90 86
xiaoli 90 86
xiaozhang 90 86
xiaowang 90 86删除 第1行
sed '1’d class1
sed ‘1d’ class1
删除 第1行 和 第3行
sed '1,3’d class1
删除包含 字符串xiaozhang的行
sed '/xiaozhang/'d class1
删除空白行
sed '/^$/'d class1删除文件最后一行
sed '$'d class1
替换文件内容
sed ‘s/[0-9]//g’ class1
sed ‘s/[a-zA-Z]//g’ class1
sed ‘s#liu#aaaaaaaaaaa#g’ class1
追加(行下追加):a\
行下追加
head -2 class2 |sed ‘/^m/a\this is a test line’
指定行下追加
head -5 class2 |sed ‘3a\this is a test line’
追加(行上追加):i\
指定行上追加
head -3 class1 | sed -i ‘3i\this is a test line’
匹配行上追加
head -3 class1 | sed ‘/aaaaa/i\bbbbbbbbbbbbbb’
互换
匹配删除
sed -r ‘/cheng|liu/d’ class1
匹配整条行
sed -nr ‘/aaaa|this/p’ class1
也可以删除-r并添加转义符
在行首添加字符串 aaa:
sed -r ‘s/(.*)/aaa:&/’ class1
更多sed用法可参考:http://man.linuxde.net/sed