linux shell中的文本处理
grep
Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来
grep命令时一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查。打印匹配到的行
由正则表达式或者字符及基本文本字符所编写的过滤条件
grep 匹配条件 处理文件
grep root passwd
grep -i root passwd ##不区分大小写
grep -i "\<root" passwd ##root前没有其他字
grep -i "root\>" passwd ##root后没有其他字
grep -i "^root" passwd ##以root开头
grep -i "root$" passwd ##以root结尾
grep -E "root|ROOT" passwd ##当使用扩展正则时应加E
grep 中字符的匹配次数设定
* 字符出现 0-任意次
\? 字符出现 0-1次
\+ 字符出现 1-任意次
{n} 字符出现 n次
{n,m} 字符最少出现n次,最多出现m次
{n,} 字符最少出现n次
sed
行编辑器
stream editor
用来操作纯 ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)可以指定仅仅处理哪些行
sed 符合模式条件的处理 不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,知道文件末尾
sed 对字符的处理
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入
-n ##仅显示script处理后的结果
sed -n /^#/p fstab ## 显示以#开头的行
sed -n '/^#/!'p fstab ##显示不以#开头的行
cat -n fstab | sed -n '6p' ##显示第六行
cat -n fstab | sed -n '6p;3p' ##显示第六行和第三行
cat -n fstab | sed -n '2,6!p' ##显示除了2到6行以外行
d 模式操作
sed '/^UUID/d' fstab ##显示除UUID开头的行
sed '/^$/d' fstab ##显示除空行以外的行
sed '1,4d' fstab ##显示除1到4行以外行
w 模式操作
sed '/^#/w /mnt/testfile' fstab ##将fstab#开头行内容写入testfile
sed '1r/mnt/hello' fstab ##将hello第一行内容写入 fstab
c 模式操作
sed '/^#/chello' fstab ##将#开头行替换成hello
i 模式操作
sed '/^UUID/ihello' fstab ##在UUID 开头行前加入hello
a 操作模式
sed '/^UUID/ahello' fstab ##在UUID开头行后加入hello
=
显示行号
sed -ne '/^UUID/=;/^UUID/p' fstab | sed 'N;s/\n//g' ##=显示UUID行号 并显示UUID行内容
N 将模式空间内容整合并将换行替换
G
给行加入一空行
g 替换
给passwd文件每行加入行号
sed '=' -i passwd
sed 'N;s/\n/ /g' -i passwd
sed 's/nologin/bash/g' passwd ##将nologin替换还曾bash
sed '1,5s/nologin/bash/g' passwd ##将1到5行nologin替换成bash
sed '5s/nologin/bash/g;3s/nologin/bash/g' passwd ##将第三行和第五行 nologin替换成bash
sed '/daemon/,/mail/s/nologin/bash/g' passwd ##将daemon行到mail行 nologin替换成bash
sed 's/\// /g' passwd ##将/替换成空格
sed '[email protected]/@ @g' passwd ##将/替换成空格
修改apache端口号
#!/bin/bash
[ -z "$1" ] &&{
echo -e "\033[31mError: Please input port number for Apache Server\033[0m"
exit
}
sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd
echo -e "\033[32mPort has change to $1 \033[0m"
根据文件建立用户和密码
#!/bin/bash
Max_Line=`sed -n '$=' $1`
for i in $(seq 1 $Max_Line)
do
USERNAME=`sed -n "${i}p" $1`
PASSWORD=`sed -n "${i}p" $2`
id $USERNAME &> /dev/null && {
echo "$USERNAME is exist"
}||{
useradd $USERNAME
echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null && echo $USERNAME CREATED
}
done