首页 > 代码库 > linux正则搭配sed的使用
linux正则搭配sed的使用
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-201608300202
cat /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-file100
seq -f ‘file%01g‘ 1 100 | xargs mkdir
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.\< (\b) 锚定词首 grep "\<r..t" /etc/passwd 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
本文出自 “屋檐下的思考” 博客,请务必保留此出处http://wuyanxxk.blog.51cto.com/4130666/1851881
linux正则搭配sed的使用