sed 命令:
sed 是一种流编辑器, 它是文本处理中非常中的工具, 能够完美的配合正则表达式使用, 功能不同凡响
语法:
- sed [options] 'command' file(s)
- sed [options] -f scriptfile file(s)
常用选项:
-e: 允许在同一行里执行多条命令
-n: 和 p 命令一起使用表示只打印那些发生替换的行
-i: 直接编辑源文件
-r: 使用扩展正则表达式
-f<script 文件 >: 指定的 script 文件来处理输入的文本文件
-h: 显示帮助;
-V: 显示版本信息
示例:
sed 's/book/books/' file 文本中的 book 替换成 books(每行第一个 book)
sed 's/book/books/g' file 文本中所有的 book 替换成 books
sed -n 's/test/TEST/p' file 表示只打印文本中发生替换的行
sed -n '1,4'p 1.txt 打印指定的行
sed -n '/root/'p 1.txt 打印包含指定字符串的行
sed -i 's/book/books/g' file 表示直接修改源文件, 文本中所有的 book 替换成 books
sed -i 's/^/#&/' 1.txt 表示每行行首添加 #号, 直接修改文件
sed '/^$/d' file 删除空白行 (注意: d 是在后面的, s 命令在前面)
sed '2d' file 删除第二行
sed '2,$d' file 删除第二行到末行所有行
sed '$d' file 删除最后一行
sed 's/[0-9]//g' 1.txt 删除所有数字 (实际上是所有数字替换成空了)
sed 's/[^0-9]//g' 1.txt 删除所有非数字
sed 's/^192/localhost&/' file 所有以 192 开头的行都会在行首加上 localhost
echo "a handsome boy"| sed 's/\w\+/[&]/g' \w\+ 匹配每一个单词,[&] 替换它,& 表示所匹配到的单词; 结果:[a] [handsome] [boy]
sed 's/\(root\)\(.*\)\(bash\)/\3\2\1/' 1.txt == sed 's#\(root\)\(.*\)\(bash\)#\3\2\1#' 1.txt
表示: 调换两个字符串位置; / 可以使用 #,@ 等
sed -e '/root/p' -e '/body/p' -n 1.txt == sed -n '/root/p; /body/p' 1.txt
实现同时进行多个任务; 会显示 root 或者 body 的行
sed -n 'p;n' 1.txt == sed -n '1~2p' 1.txt 打印奇数行
sed -n 'n;p' 1.txt == sed -n '2~2p' 1.txt 打印偶数行
first~step 表示以 first 开始, 后面每次加 step; 例如 1~2: 表示所有的奇数行
sed '=' 1.txt | sed 'N;s/\n/\t/' 显示行号,= 命令能显示行号, 但是行号是单独的一行, 若想行号后面跟该行的内容, 需要再进行处理
sed G 1.txt 在每一行后面插入一个空行
sed '{x;p;x}' 1.txt 在每一行前面插入一个空行
练习:
把 / etc/passwd 复制到 / root/test.txt
打印所有行
打印 test.txt 的 3 到 10 行
打印 test.txt 中包含'root' 的行
删除 test.txt 的 15 行以及以后所有行
删除 test.txt 中包含'bash' 的行
替换 test.txt 中'root' 为'toor'
替换 test.txt 中 '/sbin/nologin' 为 '/bin/login'
删除 test.txt 中 5 到 10 行中所有的数字
删除 test.txt 中所有特殊字符 (除了数字以及大小写字母)
把 test.txt 中第一个单词和最后一个单词调换位置
把 test.txt 中出现的第一个数字和最后一个单词替换位置
把 test.txt 中第一个数字移动到行末尾
在 test.txt 20 行到末行最前面加'aaa:'
Sed 命令总结
来源: http://www.bubuko.com/infodetail-2491173.html