一,测试文件test,讲awk时用的一样
sed -h -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 输出版本信息并退出 //下面test文件的内容 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false mail:x:8:12:mail:/var/spool/mail:/bin/false ftp:x:14:11:ftp:/home/ftp:/bin/false &nobody:$:99:99:nobody:/:/bin/false zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash http:x:33:33::/srv/http:/bin/false dbus:x:81:81:System message bus:/:/bin/false hal:x:82:82:HAL daemon:/:/bin/false mysql:x:89:89::/var/lib/mysql:/bin/false aaa:x:1001:1001::/home/aaa:/bin/bash ba:x:1002:1002::/home/zhangy:/bin/bash test:x:1003:1003::/home/test:/bin/bash @zhangying:*:1004:1004::/home/test:/bin/bash policykit:x:102:1005:Po
二,举例
1,替换功能
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/' test |grep tank
tankzhang:x:0:0:root:/root:/bin/bash
上面的这个例子,把test文件中的root替换成tankzhang,只不过只替换一次及终止在这一行的操作,转到下一行
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/g' test |grep zhang
tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
上面这个例子,用tankzhang把文件test中的root全部替换掉,请注意g这个字母,global的缩写
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/p' test
tankzhang:x:0:0:root:/root:/bin/bash
加了-n p后表示只打印那些发生替换的行(部分替换),上面的例子,我并没有加上grep
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/pg' test
tankzhang:x:0:0:tankzhang:/tankzhang:/bin/bash
加了-n pg后表示只打印那些发生替换的行(全部替换),上面的例子,我并没有加上grep
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/^zhang/ying/gp'
yingy:x:1000:100:,,,:/home/zhangy:/bin/bash
在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,并显示替换的行
[zhangy@BlackGhost mytest]# cat test | sed -n '2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp'
yingy:x:1000:100:,,,:/home/zhangy:/bin/bash
goodbay:x:81:81:System message bus:/:/bin/false
当有多个命令要执行时,可以用分号来分开,并且分隔符可以自定义,默认是/。上面的例子意思是在第二行,到第八行之间,替换以zhang开头的行,用ying来替换,在5,到10间,用goodbay来替换dbus,并显示替换的行
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/zhang/ying/gp' -ne '5,10s#dbus#goodbay#gp'
yingy:x:1000:100:,,,:/home/yingy:/bin/bash
goodbay:x:81:81:System message bus:/:/bin/false
这个例子根上面的那个例子一样,只不过有一点不同,那就是-e来充当了分号的作用,-e也能分割多个命令。
[zhangy@BlackGhost mytest]# sed -ne '2,8s/^\(zhangy\)/\1ing/gp' test
zhangying:x:1000:100:,,,:/home/zhangy:/bin/bash
正则的用法,在sed里面用括号的话要加上\的,不然会报错的。
[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhang/&ying/gp' test
zhangyingy:x:1000:100:,,,:/home/zhangyingy:/bin/bash
ba:x:1002:1002::/home/zhangyingy:/bin/bash
@zhangyingying:*:1004:1004::/home/test:/bin/bash
&的用处是,在找到的字符串后加上&后面的字符串,zhang后都加上了ying
[zhangy@BlackGhost mytest]# sed -ne '/^zhang/,/Po/s/zhang/ying/gp' test
yingy:x:1000:100:,,,:/home/yingy:/bin/bash
ba:x:1002:1002::/home/yingy:/bin/bash
@yingying:*:1004:1004::/home/test:/bin/bash
上面的这个例子是说,在以zhang开头的行开始,到匹配Po的行结束,在他们之间进行替换
[zhangy@BlackGhost mytest]$ sed '/root/{n;s/bin/tank/}' test
root:x:0:0:root:/root:/bin/bash
tank:x:1:1:bin:/bin:/bin/false
n;这里的n是next的缩写,找到root的行后,将其下一行的中的bin换成tank
[zhangy@BlackGhost mytest]$ sed -e '1,2y/root/ROOT/' test
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
y的作用是将匹配的字符换成大写,不过替换字符和被替换字符长度要一样
[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '$G' test
................................
.............................
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
@zhangying:*:1004:1004::/home/test:/bin/bash
root:x:0:0:root:/root:/bin/bash
这个例子中,h的作用是将找到的行,放到一个缓存区,G的作用是将缓存区中的内容放到最后一行。
[zhangy@BlackGhost mytest]$ sed -e '/root/h' -e '/zhangy/g' test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
root:x:0:0:root:/root:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
root:x:0:0:root:/root:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
root:x:0:0:root:/root:/bin/bash
行替换,用匹配root的行,来替换匹配zhangy的行
[zhangy@BlackGhost mytest]$ sed -e 's/bin/tank/g;3q' test
root:x:0:0:root:/root:/tank/bash
tank:x:1:1:tank:/tank:/tank/false
daemon:x:2:2:daemon:/stank:/tank/false
3q的意思是到第三行的时候,退出
[zhangy@BlackGhost mytest]# sed -ne '2,15s/zhangy.*[[:digit:]]/=======/gp' test
=======:,,,:/home/zhangy:/bin/bash
@=======::/home/test:/bin/bash
匹配数字别忘了中括号外面还有一个中括号。
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]
二,删除
其实我觉得吧,删除其实根替换一样,都是找出来进行一下操作而已,这个过程会牵扯到一些規则而已。
[zhangy@BlackGhost test]$ sed -e '1,14d' test
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
删除1,14行
[zhangy@BlackGhost mytest]$ sed -e '4,$d' test root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false
删除4以后的行,包括第4行,把$当成最大行数就行了。哈哈
[zhangy@BlackGhost mytest]$ sed -e '/\(false\|bash\)$/d' test
policykit:x:102:1005:Po
删除包括false的行,或者包括bash的行,别忘了加\
[zhangy@BlackGhost mytest]$ sed -e '/root/,/^test/d' test
@zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po
删除从匹配root的行,到匹配以test开头的行,中间的行
三,读取,追加,插入文件
[zhangy@BlackGhost mytest]$ sed -e '/^root/r test2' test
root:x:0:0:root:/root:/bin/bash
=============
-------------
+++++++++++++
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/bin/false
读取test2的内容,并将其写入到匹配行的下面
[zhangy@BlackGhost mytest]$ sed '/[[:digit:]]/w test2' test
将匹配数字的行,写入test2中
[zhangy@BlackGhost mytest]$ sed '/root/a\\ ===aaaa====' test
root:x:0:0:root:/root:/bin/bash
===aaaa====
bin:x:1:1:bin:/bin:/bin/false
将要插入的东西,插入匹配行的下面,
[zhangy@BlackGhost mytest]$ sed '/^daemon/i\\=================' test
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false
=================
daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
正好根a相反,将要插入的东西,插入到匹配行的上面
四,调用命令文件
[zhangy@BlackGhost mytest]$ sed -f cmd test |awk '{print $0;}'
tank:x:0:0:tank:/tank:/tank/bash
tank:x:1:1:tank:/tank:/tank/false
ba:x:1002:1002::/home/zhangy:/tank/bash
test:x:1003:1003::/home/test:/tank/bash
@zhangying:*:1004:1004::/home/test:/tank/bash
cmd是个文件,内容如下
3,12d
s/root/tank/g
相关推荐
sed可依照script的指令,来处理、编辑文本文件。 Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 语法 sed [-hnV][-e[removed]][-f[removed]][文本文件] 参数说明: -e[removed]或-...
sed命令的常用操作:主要介绍sed命令的注释方法,打印文本,替换文本,删除文本,追加文本,插入文本,移到下一行,读写文件以及多行模式等。 组合命令:主要介绍如何在sed中组合多条命令以及如何将多条命令应用到一...
Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 语法格式:sed [参数] 常用参数: -e或–...
因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器。它可以用来将所有出现的 "Mr. Smyth" 修改为 "Mr. Smith",或将 "tiger cub" 修改为 "wolf cub"。流编辑器非常适合于执行重复的编辑,这种...
sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作。sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。 sed命令的选项 sed [选项] [动作] 选项与参数...
2. SED1330在接口单元设置了适配8080系列和M6800系列MPU的操作时序电路,通过引脚的电平设置,可二者选择其一。 ---- 控制单元由振荡器、功能逻辑电路、显示RAM管理电路、字符库及其管理电路和产生驱动时序的时序...
sed 可依照脚本的指令来处理、编辑文本文件。 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。 语法 sed [-hnV][-e][-f][文本文件] 参数说明: -e或–expression= 以选项中指定的...
小工具,文本操作比较方便。命令也很简单,不会的话随便网上找找一堆。
主要介绍了一天一个shell命令 linux文本内容操作系列-sed命令详解,需要的朋友可以参考下
linux脚本编程中的sed详解,具体解释了linux中的sed命令的用法,例如可以对指定文本中的指定字符串进行替换等操作!
它使您能够使用Linux sed命令在操作系统中执行文本文件操作。 与大多数Linux应用程序一样,sed可以处理管道输入,这使它成为一种有效的脚本工具。您可以将其用作基本的查找和替换工具,如下面的示例命令所示,该命令...
sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的...
sed找到关键字所在行并将其前面的第一个字符... 您可能感兴趣的文章:查看某时间段到现在的系统日志的sed命令linux之sed命令的用法一天一个shell命令 linux文本内容操作系列-sed命令详解linux中sed命令的使用与注意小结
Stream Editor是一个Web工具,用于交互式使用和链接命令行文本操作实用程序,例如sed , grep和awk 。 Unix操作系统提供的文本转换工具在模式提取,格式化和数据操作方面具有强大的功能,但是在进行实验和调试时,...
sed 是 Stream Editor 的简写,它用于在 Linux 中进行基本的文本转换,是文件操作的一个重要命令,所以,我们也可以用它来实现文本的删除操作。 下面是一些 sed 命令的使用示例,覆盖了大多数的使用场景,
awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。 如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,...
首先要学习的就是文本编辑,而 ed 编辑器是 unix/linux 操作系统下最简单、最典型的文本编辑器,因此,学习 ed 编辑器能够帮助你很好的理解一般的文本操作,而且还可以为你以后学习 unix/linux下的一些常用命令(如 ...
查找文件内容sed命令sed脚本命令sed s 替换脚本命令sed d 替换脚本命令sed a 和 i 脚本命令sed c 替换脚本命令sed y 转换脚本命令sed p 打印脚本命令sed w 脚本命令sed r 脚本命令sed q 退出脚本命令sed 脚本命令的...