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 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.\< (\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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章