sed匹配 头尾 linux,linux正则搭配sed的使用

本文详细介绍了在Linux环境中进行系统管理的各种自动化脚本操作,包括文件复制、内容编辑、定时备份、用户管理等。通过示例展示了如何使用sed、cron等工具进行文件内容的查找、替换和维护,以及如何编写shell脚本来实现定时任务和系统维护。同时,文章还探讨了grep命令的使用技巧,以及for循环和seq命令在脚本中的应用。
摘要由CSDN通过智能技术生成

1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;cp /etc/rc.d/rc.sysinit /tmp

sed -i 's/\(^[[:space:]]\)/#\1/g' /tmp/rc.sysinit

2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;sed  -i 's/^[[:space:]]\+//g' /tmp/grub.conf

3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符sed -i 's/^#[[:space:]]\+//g' /tmp/rc.sysinit

4、为/tmp/grub.conf文件中前三行的行首加#号;sed -i '1,3s/\(^.\)/#\1/g' /tmp/rc.sysinit

5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;sed 's/enabled=0/enabled=1/g;s/gpgcheck=1/gpgcheck=2/g;' /etc/yum.repos.d/CentOS-Media.repo

6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201608300202cat /home/backup/shell/crond_shell.sh

#!/bin/bash

#定义变量

Datetime=`date +\%Y\%m\%d\%H\%M`

Baname=etc-

Quanlj=$Baname$Datetime.tar.gz

#打包

tar czf  $Quanlj /etc >/dev/null

mv $Quanlj /backup

crontab -e

00 */4 * * * sh /home/backup/shell/crond_shell.sh >/dev/null

7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20160830* * * * 2,4,6      /bin/cp /var/log/messages /backup/messages_logs/messages-`date +%Y%m%d`

注:这里的变量名为什么要写绝对路径呢,因为在定时任务执行的时候,你会发现,找不到这个命令的路径,但是手动执行又有,这点我也没明白为什么会这样。

8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中grep -E "^S" /proc/meminfo >>/stats/memory.txt

9、工作日的工作时间内,每两小时执行一次echo "howdy"

脚本编程练习例子1:

cat /home/backup/shell/echo_shell.sh

#!/bin/bash

echo "howdy"

crontab -e

* */2 * * 1-5 sh /home/backup/shell/crond_shell.sh

例子2:

用最简单的方法如下

crontab -e

* */2 * * 1-5 /bin/echo "howdy"

10、创建目录/tmp/testdir-当前日期时间;mkdir /tmp/testdir-date +%F-%T

11、在此目录创建100个空文件:file1-file100seq -f 'file%01g' 1 100 | xargs touch

12、显示/etc/passw d文件中位于第偶数行的用户的用户名;sed -n 'n;p' /etc/passwd|cut -d: -f1

13、创建10用户user10-user19;密码同用户名;#!/bin/bash

for i in $(seq -w 10)

do

useradd -s /bin/bash user10$i

echo "password$i" | md5sum | tee -a passwd.txt | passwd --stdin  user$i

done

14、在/tmp/创建10个空文件file10-file19;for i in `seq 10 19`;do touch /tmp/file$i;done;

15、把file10的属主和属组改为user10,依次类推。for in in `seq 10 19`;do chown user$i.user$i /tmp/file$i;done;

本周总结:

做完上面的作业发现,熟悉用过的一些命令,也跟着出现了,比如gerp的一些参数,在这里,也重复利用起来了,下面我对他做个归档。

励志语句:晋升需付出,空手套白狼,好比出门左转买福利彩。学习还是需要多努力,多坚持,才能走完整个过程。

grep:

一.匹配字符.    匹配任意单个字符

[ ]  匹配指定范围内的任意字符

[^]  匹配飞指定范围内的任意字符

[:alpha:] 字母字符

[:lower:] 小写字母字符

[:upper:] 大写字母字符

[:digit:] 数字

[:alnum:] 字母数字字符

[:space:] 空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符

[:punct:] 标点字符

[:cntrl:] 控制字符(禁止打印)

[:print:] 可打印字符

使用时一般使用两个中括号.

二、锚定符1.^  锚定行首    grep  "^r..t"  /etc/passwd

2.$  锚定行尾    grep  "h$"  /etc/passwd

3.^$ 锚定空白行  grep  "^$"  /etc/passwd

4.\

5.\> (\b)  锚定词首    grep  "r..t\>"  /etc/passwd

示例(容易混淆):

至少包含一个空白字符          grep  "[[:space:]]\{1,\}"  /etc/passwd

至少包含一个非空白字符        grep  "[^[:space:]]\{1,\}"  /etc/passwd

没有一个空白字符              grep  -v "[^[:space:]]\{1,\}"  /etc/passwd

6.\(\)对字符分组  grep  "\(l..e\).*\1r"

示例:

grep --color "l\([13]\):\1:.*:\1"  /etc/inittab

三、匹配次数*      匹配前面的字符任一次

.*    匹配任意长度的任意字符(注意贪婪模式,比如  grep  “r.*t” /etc/passwd  )

x\{m,n\}  指定前面的字符至少出现m次,至多出现N次。

x\{m,\}    指定前面的字符至少出现m次

x\{0,n\}  指定前面的字符至多出现N次

x\{m\}    精确匹配m次

?        匹配其前面的字符0或1次

seq:

用法:seq [选项]... 尾数

或:seq [选项]... 首数 尾数

或:seq [选项]... 首数 增量 尾数

以指定增量从首数开始打印数字到尾数。

-f, --format=格式     使用printf 样式的浮点格式

-s, --separator=字符串        使用指定字符串分隔数字(默认使用:\n)

-w, --equal-width     在列前添加0 使得宽度相同

for:例子1

for 变量

do

语句

done

例子2

for 变量 in 列表

do

语句

done

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值