sed
前言:前面学到了文本处理三剑客之一grep,但是grep在有些时候显得力不从心,我们需要一款针对行操作的处理工具,没错,这就是sed流编辑器。
sed用法提炼: sed 's/(text1)(text2)(text3)/\1\2\3/'
vim
前言:强大的Linux如果没有一款疯狂的编辑器,常用的编辑操作会不会力不从心?今天本文介绍的就是上古神器vim的各种操作,尽管 Vim 已经是古董级的软件,但还是有无数新人迎着困难去学习使用,可见其经典与受欢迎程度。另外,由于 Vim 的可配置性非常强,各种插件、语法高亮配色方案等多不胜数,无论作为代码编辑器或是文稿撰写工具都非常给力……
vim之此处文档dilimiter
vim编辑器需要用户传递各种编辑参数和编辑内容,使用输入重定向将参数传递给vim编辑器,结合特定组合键,就能完成编辑操作。有如下脚本
#!/bin/bash vim /tmp/text <<EOF #创建文件/tmp/text,设置文本开始标识,等待参数传入 i #进入插入模式 The first line #编辑文本 The second line ^[ #特殊组合键,Ctrl+v-->ESC 回到命令行模式 ZZ #保存文件且退出 EOF ---------------------------------- Vim: 警告: 输入不是来自终端(键盘) The first line The second line "/tmp/text" [新] 4L, 33C 已写入 [root@ _209_ ~]#
虽然实现了把数据写入文件,但还是不推荐这种写法,不过需要接受参数的命令,可以借鉴类似的做法。
vim小试牛刀
1、如何设置tab缩进为4个字符
:set tabstop=4
2、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
[root@ _2_ ~]# cp /etc/rc.d/init.d/functions /tmp [root@ _3_ ~]# vim /tmp/functions :%s@/etc/sysconfig/init@/var/log@g 3 次替换,共 3 行 ... if [ -f /var/log ]; then . /var/log else # This all seem confusing? Look in /var/log, ...
3、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号
~]# vim /tmp/function :%s@^#\([[:space:]]\+.*\)@\1@g A sed expression to filter out the files that is_ignored_file recog nizes __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmori g\|\.rpmsave\)$/d' if [ "$_use_systemctl" = "1" ]; then
4、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
[root@ _4_ ~]# cp /etc/profile /tmp/ [root@ _5_ ~]# vim /tmp/profile :%s/^[[:space:]]\+//g if [ "${-#*i}" != "$-" ]; then . "$i" else . "$i" >/dev/null fi fi done unset i unset -f pathmunge 33 次替换,共 33 行
5、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
[root@ _7_ ~]# cp /etc/init.d/functions /tmp/functions [root@ _8_ ~]# vim /tmp/functions :%s/^[[:space:]].*/#&/ # "x$1" = xforce-reload -o \ # "x$1" = xcondrestart ] ; then # systemctl_redirect $0 $1 # exit $? # fi fi 443 次替换,共 443 行
sed大展身手
6、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符
[root@ _11_ ~]# sed -r 's/^[[:space:]]+(.*)/\1/' /etc/grub2.cfg
7、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
删除前: [root@ _8_ ~]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jul 19 22:27:09 2016 删除后: [root@ _7_ ~]# sed -r 's/^#[[:space:]]+(.*)/\1/' /etc/fstab # /etc/fstab Created by anaconda on Tue Jul 19 22:27:09 2016 # Accessible filesystems, by reference, are maintained under '/dev/disk' See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
8、在/root/install.log每一行行首增加#号
[root@ _12_ ~]# sed 's/.*/#&/' initial-setup-ks.cfg ##version=DEVEL ## X Window System configuration information #xconfig --startxonboot ## License agreement #eula --agreed ## System authorization information
9、在/etc/fstab文件中不以#开头的行的行首增加#号
[root@ _13_ ~]# sed -e 's/^[^#].*$/#&/' -e 's/^$/#&/' /etc/fstab # # # /etc/fstab # Created by anaconda on Tue Jul 19 22:27:09 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # #UUID=a7717433-0d0f-4126-8eff-2e41361cea79 /
10、处理/etc/fstab路径,使用sed命令取出其目录名和基名
取目录名: echo "/etc/fstab" |sed -r 's#[^/]+/?$##g'|sed -r's#(.+)/#\1#' /etc 取基名: [root@ _55_ ~]# echo "/etc/fstab/" |sed -r 's#/#\n#g'|sed -rn -e "/^[^[:space:]]/p"|sed -n '$p' fstab 一起取: [root@ _160_ ~]# echo "/etc/fstab" |sed -r "s#(.*/)([^/]+/?$)#\1#" \2
11、利用sed 取出ifconfig命令中本机的IPv4地址
[root@ _164_ ~]# ifconfig|sed -n '2p' |sed -r 's/.*inet (.*) netmask.*/\1/' 192.168.33.200
12、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
[root@ _187_ ~]# ls /mnt/Packages/ |sed -n '/.rpm$/p'|sed -r 's/.*\.([^\.]+)\.rpm$/\1/'|sort|uniq -c 2000 i686 2938 noarch 4069 x86_64
原创文章,作者:M20-1--孔祥文,如若转载,请注明出处:http://www.178linux.com/32452