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
时间: 2024-10-24 02:15:52

linux正则搭配sed的使用的相关文章

Linux echo, sort, sed 等一些命令总结

linux echo, sort, sed是初学linux shell script 的一些常用的命令.基本上来说,如果能够掌握了这些命令,我们就能写出一些不错的linux脚本.以下是我遇到的以下常用的echo,sort, sed等命令的一些应用; 1.  echo -e: BW="f25\nf50\nf75\nf100\n"; 如果直接echo $BW, 结果是f25\nf50\nf75\nf100\n.所以我们必须加上-e选项才能实现换行的目的,即echo -e $BW Note:

不看绝对后悔的Linux三剑客之sed实战精讲

二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令效率不高,这就好比一块空地准备搭建房子,请了10个师傅拿着铁锹挖地基,花了一个月的时间才挖完,而另外一块空地则请了个挖土机,三下五除二就搞定了,这就是效率.而在linux中的"挖土机"有三种型号:顶配awk,中配sed,标配grep.使用这些工具,我们

自学linux指令分析-sed

自学linux指令分析-sed 1·命令格式  sed [-nefri]   /输入文本/'command'   文件    2·命令参数 -n                          取消默认输出 -i                            改变输出的内容 -e                          进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑 -f                           指定

〖Linux〗使用sed命令修改小端(little endian)存储的数据

1 #!/bin/bash - 2 #=============================================================================== 3 # 4 # FILE: hex_change.sh 5 # 6 # USAGE: ./hex_change.sh 7 # 8 # DESCRIPTION: 9 # 10 # OPTIONS: --- 11 # REQUIREMENTS: --- 12 # BUGS: --- 13 # NOTES:

linux三剑客之sed史上最实用教程!

2016老男孩教育的官方博客干货不断,敬请关注! linux三剑客之sed史上最实用教程!猛戳下面地址即可观看! http://blog.oldboyedu.com/commands-sed/

关于Linux系统中sed编辑器详细讲解

一.sed简介 sed是非交互式的编辑器.它默认不不编辑源文件,仅仅对模式空间中的数据做处理,并将模式空间中的内容显示在屏幕上.sed编辑器是逐行处理文件,并将结果发送到屏幕.具体过程如下: 首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上.sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示.处理完输入文件的最后一行后,sed便结束运行.sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修

linux文本处理sed、软件包管理、磁盘存储和文件系统

linux文本处理sed.软件包管理.磁盘存储和文件系统 1.取基名和文件名 [[email protected] scripts38]#echo /etc/sysconfig/network-scripts/ |sed -r '[email protected](^/.*/)([^/]+)/[email protected]\[email protected]' /etc/sysconfig/ [[email protected] scripts38]#echo /etc/sysconfig/

正则与sed,grep,awk三剑客

系统登录顺序: /etc/profile /etc/profile.d/a.sh (a.sh自己建的) /root/.bash_profile /root/.bashrc /etc/bashrc /bin/bash 提供命令解释器(终端) 直接打/bin/bash 非登录shell /root/.bashrc /etc/bashrc /etc/profile.d/a 可将别名alias等写入以上三个文件 正则表达式: grep -n  只显示行号 -o 只显示匹配内容 -q  安静模式,不打印

Linux中的sed详解

Sed简介 Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行.Sed工作是在"模式空间"中进行的并不操作源文件.对源文件无危害. Sed使用格式 sed [-nefri] 'command' 输入文本 sed使用参数 -n 使用安静(silent)模式.在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e 直接在命令列模式上进行 sed