第1章 sed命令詳解 1.1 查找固定的某一行 1.1.1 awk命令方法 1.1.2 grep方法 1.1.3 sed方法 1.2 sed的替換 s為 sub(substitute)替換 g global 表示全局替換 1.2.1 將oldboy替換程oldboyedu &表示前面找到的東西。 ...
第1章 sed命令詳解
1.1 查找固定的某一行
1.1.1 awk命令方法
[root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.1.2 grep方法
[root@znix ~]# grep -v "oldboy" person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.1.3 sed方法
[root@znix ~]# sed -n '/oldboy/!p' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO [root@znix ~]# sed '/oldboy/d' person.txt 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.2 sed的替換
s為 sub(substitute)替換
g global 表示全局替換
1.2.1 將oldboy替換程oldboyedu
&表示前面找到的東西。
[root@znix ~]# sed 's#oldboy#&edu#g' person.txt 101,oldboyedu,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.2.2 把文件中的數字都替換成<num>樣式。
[root@znix ~]# sed 's#[0-9]#<&>#g' person.txt <1><0><1>,oldboy,CEO <1><0><2>,zhangyao,CTO <1><0><3>,Alex,COO <1><0><4>,yy,CFO <1><0><5>,feixue,CIO
g表示把sed命令找到的內容進行替換,不加g 只替換找到的第一個。
[root@znix ~]# sed 's#[0-9]#<&>#' person.txt <1>01,oldboy,CEO <1>02,zhangyao,CTO <1>03,Alex,COO <1>04,yy,CFO <1>05,feixue,CIO
1.2.3 把前面正則表達式找到的第二列內容進行替換
[root@znix ~]# sed 's#[0-9]#<&>#2' person.txt 1<0>1,oldboy,CEO 1<0>2,zhangyao,CTO 1<0>3,Alex,COO 1<0>4,yy,CFO 1<0>5,feixue,CIO
1.2.4 把前面正則表達式找到的第二列以後內容進行替換
[root@znix ~]# sed 's#[0-9]#<&>#2g' person.txt 1<0><1>,oldboy,CEO 1<0><2>,zhangyao,CTO 1<0><3>,Alex,COO 1<0><4>,yy,CFO 1<0><5>,feixue,CIO
1.3 單引號 雙引號 不加引號的區別
1.3.1 單引號: 所見即所得
[root@znix ~]# echo '$LANG $(hostname) {1..3}' $LANG $(hostname) {1..3}
1.3.2 雙引號: 對特殊符號進行解析
[root@znix ~]# echo "$LANG $(hostname) {1..3}" en_US.UTF-8 znix {1..3}
1.3.3 不加引號:支持通配符
[root@znix ~]# echo $LANG $(hostname) {1..3} en_US.UTF-8 znix 1 2 3
1.4 sed與變數
1.4.1 在變數中放入一行內容
[root@znix ~]# a=hello [root@znix ~]# a='hello world' [root@znix ~]# echo $a hello world
1.4.2 查看下文件的內容
[root@znix ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.4.3 定義一個變數,對變數進行替換
雙引號裡面,能夠對變數進行解析
[root@znix ~]# sub=oldboy [root@znix ~]# sed "s#$sub#znix#g" person.txt 101,znix,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.4.4 將兩個變數分別放置,用變數替換變數。
[root@znix ~]# sub=oldboy [root@znix ~]# aim=znix [root@znix ~]# sed "s#$sub#$aim#g" person.txt 101,znix,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.5 【企業案例】系統開機啟動項優化
將chkconfig中的除 sshd|network|crond|rsyslog|sysstat 之外的全部關閉。
1.5.1 各項服務的含義
crond 定時任務 sshd 遠程連接服務 network 網路 sysstat 系統工具 rsyslog 系統日誌服務 system log centos 6.x 7.x 中系統日誌服務為rsyslog centos 5.x 裡面系統日誌服務為 syslog
1.5.2 第一步把想要保留的排除走
[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d' abrt-ccpp 0:off 1:off 2:off 3:off 4:off 5:off 6:off abrtd 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:off 3:off 4:off 5:off 6:off atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off auditd 0:off 1:off 2:off 3:off 4:off 5:off 6:off blk-availability 0:off 1:on 2:off 3:off 4:off 5:off 6:off cpuspeed 0:off 1:on 2:off 3:off 4:off 5:off 6:off ……
1.5.3 第二步取出服務的名字
[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g' abrt-ccpp abrtd acpid atd auditd blk-availability cpuspeed ……
1.5.4 第三步拼接出想要的形狀
[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#chkconfig \1 off #g' chkconfig abrt-ccpp off chkconfig abrtd off chkconfig acpid off chkconfig atd off chkconfig auditd off chkconfig blk-availability off ……
1.5.5 第四步交給bash執行
[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d'|sed -r 's#(^.*)0:.*#\1#g|bash
1.5.6 第五步檢查結果
[root@znix ~]# chkconfig |grep "3:on" crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
1.5.7 簡化命令
1.5.7.1 示例一:
[root@znix ~]# chkconfig |sed -r '/sshd|network|crond|rsyslog|sysstat/d;s#(^.*)0:.*#chkconfig \1 off#g'|bash
1.5.7.2 示例二
[root@znix ~]# chkconfig |sed -rn '/sshd|network|crond|rsyslog|sysstat/!s#^(.*)0:.*#chkconfig \1 off#gp'|bash
1.6 &符號的使用
&符號找東西會把剩下的顯示出來
[root@znix ~]# echo oldboy123 oldboy123 [root@znix ~]# echo oldboy123|sed 's#.*1#&#g' oldboy123 [root@znix ~]# echo oldboy123|sed 's#.*1#{&}#g' {oldboy1}23
1.7 【練習題】把person.txt 中包含yy的行 這一行裡面的數字替換為空
1.7.1 文件內容
[root@znix ~]# cat person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
1.7.2 /yy/查找yy這行,使用s###g對文件內容進行替換
[root@znix ~]# sed -r '/yy/s#[0-9]##g' person.txt 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO ,yy,CFO 105,feixue,CIO
1.7.3 將不包含yy的行進行替換
-n 取消預設輸出,所以yy那一行不會輸出
[root@znix ~]# sed -rn '/yy/!s#[0-9]##gp' person.txt ,oldboy,CEO ,zhangyao,CTO ,Alex,COO ,feixue,CIO
1.8 查看sed更多的幫助信息【info】
[root@znix ~]# info sed faq 經常遇到的問題,經常有人問的問題
第2章 shell 編程
2.1 什麼是shell
命令大禮包
判斷 迴圈
2.1.1 shell的作用:
為重覆性的工作節約時間,省事
2.2 如何查看當前用戶的命令解釋器
[root@znix ~]# echo $SHELL /bin/bash
2.2.1.1 shell修改為 sh 會有一些問題
[root@znix ~]# sh sh-4.1# bash [root@znix ~]#
2.3 書寫shell腳本的要求
位置統一存放,便於管理
[root@znix scripts]# pwd /server/scripts
腳本內容
[root@znix scripts]# vim show.sh #!/bin/bash ##使用的命令解釋器 #filename:show.sh ##文件名 #desc: miaoshu ##描述 /sbin/ifconfig eth0|awk -F "[: ]+" 'NR==2{print $4}'
腳本中儘量使用命令的絕對路徑
[root@znix scripts]# sh show.sh 10.0.0.201
2.4 shell腳本之變數
2.4.1 什麼是變數
舉個慄子:
znix 變數的名字 $znix 查看變數里的內容 znix="access" 修改變數的內容
修改變數的時候最好使用引號將內容引起來。
2.4.2 環境變數(全局變數)
2.4.2.1 特點
1)大寫
2)在linux裡面都生效
2.4.2.2 查看系統中的環境變數
使用env命令,可以列出系統中,所有的變數
[root@znix scripts]# env HOSTNAME=znix TERM=linux SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=10.0.0.1 3156 22 SSH_TTY=/dev/pts/1 USER=root ……
2.5 手動創建一個環境變數
2.5.1 創建一個普通變數
[root@znix scripts]# ZNIX=clsn [root@znix scripts]# echo $ZNIX clsn
2.5.2 臨時創建環境變數
關鍵:export 是創建環境變數使用的
[root@znix scripts]# export ZNIX=clsn [root@znix scripts]# env|grep clsn ZNIX=clsn
2.5.3 讓環境變數永久生效
2.5.3.1 將 export ZNIX=clsn 放入 /etc/profile
[root@znix scripts]# echo 'export ZNIX=clsn' >> /etc/profile
2.5.3.2 讓寫入的內容生效 ,使用source /etc/profile
[root@znix scripts]# source /etc/profile
2.6 shell腳本與變數
2.6.1 腳本的內容:
[root@znix scripts]# cat show2.sh #!/bin/bash echo $a
2.6.2 shell與普通變數
只在當前的shell中生效,執行腳本的時候,很產生一個新的shell環境(子shell)。普通變數不能對系統中其他的shell環境產生影響,普通變數沒用了。
[root@znix scripts]# a=100 [root@znix scripts]# sh show2.sh
2.6.3 shell與全局變數
全局變數對系統中所有的shell環境都有效,export 在系統任何一個地方都承認他。
[root@znix scripts]# export a=100 [root@znix scripts]# sh show2.sh 100
2.7 與用戶有關的環境變數配置文件/目錄
/etc/motd 用戶登陸到系統後顯示的信息
2.7.1 全局環境變數配置文件
/etc/profile /etc/bashrc /etc/profile.d/ (目錄)
2.7.2 用戶環境變數
~/.bash_proflie
~/.bashrc
2.8 變數命名規則
變數名可以是字母、數字或下劃線 的組合。
但是不能是以數字開頭。
可以以下劃線開頭。
2.8.1 取變數的時候將變數用{ } 包起來
[root@znix ~]# www=123 [root@znix ~]# echo $www 123 [root@znix ~]# echo $wwwday [root@znix ~]# echo ${www}day 123day
2.9 shell中的特殊變數
2.9.1 $數字 與 $0
[root@znix scripts]# cat para.sh #!/bin/bash echo $1 $2 $3 ... $0 [root@znix scripts]# sh para.sh a b c a b c ... para.sh
$1 添加到Shell的各參數值。$1是第1參數、$2是第2參數
$0 腳本文件的名字
2.9.2 [練習] 使用變數寫一個簡單的計算器。
2.9.2.1 先寫出一個模板。
[root@znix scripts]# cat cal.sh #!/bin/bash echo 1+2|bc [root@znix scripts]# sh cal.sh 3
2.9.2.2 將期中的內容替換成為變數
[root@znix scripts]# cat cal.sh #!/bin/bash echo $1 + $2|bc [root@znix scripts]# sh cal.sh 100 50 150
2.9.2.3 將裡面的計算方式增加。
[root@znix scripts]# vim cal.sh #!/bin/bash echo $1 + $2|bc echo $1 - $2|bc echo $1*$2|bc ### *在這裡有不能有空格 echo $1 / $2|bc echo $1 ^ $2|bc
2.9.2.4 執行腳本,進行計算。
[root@znix scripts]# sh cal.sh 4 6 10 -2 24 0 4096
2.9.3 awk的計算方法
2.9.3.1 awk使用 -v 參數 指定變數。
[root@znix scripts]# awk -va=1 -vb=10 'BEGIN{print a/b }' 0.1
2.9.3.2 將awk命令放入腳本中
[root@znix scripts]# tail -2 cal.sh #!/bin/bash a=$1 b=$2 awk -vnum1=$a -vnum2=$b 'BEGIN{print num1/num2}'
2.9.3.3 測試腳本,檢查腳本的執行結果。
[root@znix scripts]# sh cal.sh 10 23 0.434783
第3章 vim 高級使用技巧
3.1 vim中進行查找替換
命令 |
含義 |
:4,$s#$1#$a#g |
從第4行到最後一行進行替換 |
:5,$s#$1#$a#g |
從第5行到最後一行進行替換 |
:1,$s#$1#$a#g |
從第一行到最後一行進行替換 |
:%s#$1#$a#g |
從第一行到最後一行進行替換 |
:.s,$s#echo#sed#g |
從當前行到最後一行(. 表示當前行) |
ctrl + v 按d批量刪除
ctrl + v 按x批量刪除
dd 刪除游標所在行
dG 刪除游標所在行到最後一行
D 游標所在位置到行尾的內容
x 刪除游標所在位置的一個字元