sed命令介绍
sed全称是:Stream EDitor(流编辑器)
Linux sed 命令是利用脚本来处理文本文件,sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
sed 的运行模式
当处理数据时,Sed 从输入源一次读入一行,并将它保存到所谓的模式空间pattern space中。所有 Sed 的变换都发生在模式空间。变换都是由命令行上或外部 Sed 脚本文件提供的单字母命令来描述的。大多数 Sed 命令都可以由一个地址或一个地址范围作为前导来限制它们的作用范围
sed的相关选项
erlang"> -n, --quiet, --silent 取消自动打印模式空间-e 脚本, --expression=脚本 添加“脚本”到程序的运行列表-f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表--follow-symlinks 直接修改文件时跟随软链接-i[扩展名], --in-place[=扩展名] 直接修改文件(如果指定扩展名就备份文件)-l N, --line-length=N 指定“l”命令的换行期望长度--posix 关闭所有 GNU 扩展-r, --regexp-extended 在脚本中使用扩展正则表达式-s, --separate 将输入文件视为各个独立的文件而不是一个长的连续输入-u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出--help 打印帮助并退出--version 输出版本信息并退出-a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~-c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!-d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;-i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);-p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~-s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法
sed语法
erlang">Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...
本次测试文本内容
erlang">polkitd 999
chrony 998
xiaowang 1000
chenhang 1001
zhnagjian 1002
zhangjian 1003
wangshenghu 1004
yalin 1005
nginx 997
lilanqing 1006
califeng 1007
cali123 1008
shimengmeng 1010
zhouyiwei 1011
zhaojunjie 1013
kimi 1014
kimi2 996
linhucong 1015
kimi3 1016
feng2 1018
feng3 1019
feng4 1020
feng5 1021
liudehua 1022
liming 1023
libai 1024
xiaoxiao 1025
xiyangyang 1026
meiyangyang 1027
lanyangyang 1028
zhangwuji 1029
liang 1030
sed的查看功能
查看test.txt中五至八行的内容
erlang">sed -n '5,8 p' test.txt
查看test.txt文件中以z/zha开头的行
erlang">sed -n '/^z/ p' test.txt
sed -n '/^zha/ p' test.txt
sed的查找功能
查找test.txt文件中有101字符串的行
erlang">sed -n '\%101% p' test.txt
将 test.txt 第 2~4 行删除打印输出
erlang">sed '2,5 d' test.txt |head
这里经过我的观察,如果要删除某一行,后面的数字要行数+1才行,例如想删2-5行,需要写2,6
以行为单位的新增
在文件test.txt上的第四行后面添加新字符串
erlang">sed -e 4a\it-test test.txt | head
passwd第1前追加huawei
erlang">sed '1 i\huawei ' test.txt |head
sed替换功能
test.txt第三行替换为redhat
erlang">sed '3 c\redhat' test.txt |head
将test.txt的5到10的101字符串查找出来替换为aaaa
erlang">sed -n '5,11 s/101/aaaa/ p' test.txt |head
这里没替换出来,不知道哪里出了问题
修改原文件之前备份
erlang">sed -i.bak '1 d' test.txt