sed
利用script来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
Sed的删除和添加行数
cat -n d| sed '5d' 列出d中内容及行号并删除第五行 cat -n d| sed '2d;4d' 列出d中内容及行号删除第二行和第四行 cat -n d| sed '1,3d' 列出d中内容及行号删除第一到第三行
在指定行之后添加新行
sed -e a\xue d 未指定那一行每行之后都加 sed -e 1a\xue d 1—>xx指定某行之后添加
指定字符之后添加
sed '/world/aworld' d world之后添加world sed '/world/aworld\ntest' d word之后加入world和test两行 sed '/^world/aworld\ntest' d world之前加入 sed '/world$/aworld\ntest' d world之后加入
插入
sed '/hello/ilove' d d文件hello之上添加love
修改
sed '/hello/clove' d hello变为love
删除
sed '/^#/d' fstab 删除以#开始的 sed '/^#/!d' fstab 删除不是以#开始的
sed n '/^UUID/!d' fstab 显示所有 sed -n '/^UUID/!d' fstab 什么也不显示 sed '/^UUID/!d' fstab 开头为UUID的不删除 cat -n fstab|sed '1,4d' 删除第1,4行
对于两个文件之间的合并(写)
sed '$r d' fstab d加在fstab的末尾 sed '1r d' fstab d加在fstab的第一行之后 sed '/UUID/r d' fstab d加在UUID之后
替换
sed 's/nologin/westos/g' passwd 全文no替换westos sed 's/\/nologin//g' passwd /nologin替换为空格
sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,这个动作会直接修改到原始的文件,所以请不要随便拿系统配置来测试,加上参数 -i 可实现对原始文件的修改
用户自动建立脚本
现在有两个文本userfile passfile写一个脚本建立用户密码,用户用第一行匹配第一行密码,依次类推
#!/bin/bash [ "$USER" = "root" ]||{ echo please run this with root exit } [ -e "$1" -a -e "$2" ]||{ echo $1 or $2 is not exist exit } [ -z "$1" -o -z "$2" ]||{ echo Please input userfile or passwd file exit } Max_Line=`wc -l $1 | cut -d" " -f 1` for NUM in `seq 1 $Max_Line` do USER=`sed -n ${NUM}p $1` PASS=`sed -n ${NUM}p $2` useradd $USER echo $PASS | passwd --stdin $USER &>/dev/null &&{ echo $USER created } done
脚本要求写一个可以自动更改apache端口的脚本
#!/bin/bash [ -n "/etc/httpd/conf/httpd.conf" ]||{ echo Error:Apache is not installed exit } sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf systemctl restart httpd netstat -antlupe | grep httpd
在文件/usr/share/mime/packages/freedesktop.org.xml 中查找所有包含 ich 的行,将找出的行按照先后顺序拷贝到/root/lines文件中,/root/lines文件不包含空格,并且其中行的内容是源文件,/usr/share/mime/packages/freedesktop.org.xml 原始行的准确副本
[root@xaut mnt]# sed -e 's/^\ *//g' -ne '/ich/p' /usr/share/mime/packages/freedesktop.org.xml >/root/lines [root@xaut ~]# grep ich /usr/share/mime/packages/freedesktop.org.xml|sed 's/\ *//g'> /root/lines
#!/bin/bash [ "$#" = 0 ]&&{ echo " Please input username" } Check_User=`getent passwd $1` [ -n "$Check_User" ]&&{ echo " [D]elete [C]hangepasswd " read -p " What do you want : " ACTION [ "ACTION" = "d" -o "ACTION" = "D" ]&&{ userdel -r $1 echo $1 is deleted!! exit } [ "ACTION" = "c" -o "ACTION" = "C" ]&&{ read -p "input password: " PASS echo $PASS |passwd --stdin $1 echo "$1's passwd is changed" exit } }||{ echo " $1 is not exist you can do this " echo " [C]reate [S]kip " read -p " what do you want:" ACTION [ "$ACTION" = "c" -o "$ACTION" = "C" ]&&{ useradd $1 read -p "input passwd: " PASS echo $PASS | passwd --stdin $1 echo $1 is created exit } [ "$ACTION" = "s" -o "$ACTION" = "S" ]&&{ echo "BYE" exit } }