第6天grep正則表達式 ,vim,shell概念
fgrep不支持正則表達式搜索 ,只支持普通字符串過濾
grep -E grep -F
grep是兩個合在一起
grep root /etc/passwd
grep "$USER" /etc/passwd 可以過濾變量結果
grep ‘root‘ /etc/passwd 可以過濾字符串
grep whoami
/etc/passwd 可以過濾命令結果
grep abc 尋找adc 包含abc字符串就顯示 PATTEN字符串 也可以是文件
grep是包含字符串就全都匹配
grep -v “abc” 不包含abc字符串 只限於字符串的行
grep -n 加行號
jsdalkabcccc
[0-9]{1,3}.
grep -o 只限制模式本身字符串
先取出最後不是/的字符,由於貪婪模式所以能取到/etc/sysconfig/network-scripts 之後再挑選出
/etc/sysconfig/
echo "/etc/sysconfig/network-scripts/" |grep -o ".[^/]" |grep -o "^/./" 挑選出文件夾dirname
grep root /etc/passwd
grep 把標準輸出按字符串處理
grep -c 有幾行 只關心有幾行而不是關系那些行
-o 只顯示字符串本身
-q 靜默模式 包含不包含都不顯示,會有返回結果echo$? 非零沒到到 0找到了
grep "root" /etc/passwd &> /dev/null
grep -nA3 root /etc/passwd 在符合條件後三行顯示
[[email protected] network-scripts]#grep root -nA3 /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4-adm:x:3:4:adm:/var/adm:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13-nobody:x:99:99:Nobody:/:/sbin/nologin
B是行前 C是前後行
用來搜索特定行 比如搜索一個位置之後想看這個位置附近信息
安裝nmap 6.4
用來網絡掃描 那些地址是開機 哪個地址不能訪問
ip a 查看 ip地址
rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/nmap-6.40-16.el7.x86_64.rpm
用來網絡掃描 那些地址是開機 哪個地址不能訪問
nmap -v -sp 172.20.20.0/24 掃描網段
nmap -v -sP 172.18.140.0/24 |grep up -B1 >nmap.log
cat nmap.log |grep for |cut -d" " -f5
掃描
grep -e “root“ -e “bash“” 或者
grep -w abc 單詞必須是adc
中間有空格 "x abc y" "-abc-y" ",abc,s" 不算單詞
下劃線和數字中間有數字算單詞 “f2abc2f”“jdd_abc_ds”
通配符對的是文件名而正則表達式是文本裏名字
grep -E egrep
grep -F fgrep
grep -f 文件 /etc/passwd 把文件中字符串 搜索到/etc/passwd
grep -E
匹配控制字符串
BRE 基本正則
ERE 擴展正則 grep -E
PCRE 正則表達式引擎 算法 perl語言 支持正則表達式則安裝程序也需要
PCRE安裝軟件模塊
man 7 regex
元字符分類 : 字符匹配,匹配次數,位置苗頂,分組
貪婪模式 盡可能匹配所有長度
.任意單一字符
\ 轉意符 轉化為字符本身
[] 一個字符 如果裏頭沒有符號就不包含符號 區中括號的字符
匹配次數 某一個字符出現次數有幾次
X 表示X X出現的次數不確定0次任意多次
.任意長度任意字符串
space 本身包括tab 和空格鍵
[[email protected] ~]#cat f1 |grep -v "^[[:space:]]$"
123
345
grep過濾的是[a-z] a到z
[[email protected] ~]#echo "/etc/sysconfig/network-scripts" |grep -o ".[^/]\b"|grep -o "^./" \b代表單詞結尾 \>
-bash: cdd: command not found
[[email protected] ~]# echo "a;cdd" | grep "a[.]\?c"
[[email protected] ~]# echo "a&cdd" | grep "a[.]\?c"
[[email protected] ~]# echo "a&cdd" | grep "a.\?c"
a&cdd
[[email protected] ~]# echo "a&cdd" | grep "a.\?c"
a&cdd
[[email protected] ~]# echo "a&cdd" | grep "a[.]\?c"
[[email protected] ~]# echo "a&cdd" | grep "a.\?c"
a&cdd
[[email protected] ~]#
[[email protected] ~]# echo "a>>cdd" | grep "a.\?c"
[[email protected] ~]# echo "a>cdd" | grep "a.\?c"
a>cdd
[[email protected] ~]# echo "a.cdd" | grep "a[.]\?c"
a.cdd
[[email protected] ~]# echo "a(cdd" | grep "a[.]\?c"
[[email protected] ~]# echo "a(cdd" | grep "a[(.]\?c"
a(cdd
\? 前一個字符1次或者0次 非貪婪模式 懶惰模式一旦匹配就不往下看
cat /etc/passwd | grep "^(.):./\1$"
[[email protected] ~]#cat /etc/passwd | grep "^(\<.\>).\1$"
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:1009:1010::/home/bash:/bin/bash
[[email protected] ~]#grep "^(a|b)" /etc/passwd
[[email protected] ~]#grep "^a|^b" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
apps:x:1007:1008::/home/apps:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
bash:x:1009:1010::/home/bash:/bin/hahabash
[[email protected] ~]#grep "^s|^S" /proc/meminfo
[[email protected] ~]#grep "\<[0-9]{2,3}\>" /etc/passwd ]
[[email protected] ~]#grep "rpc" /etc/passwd |grep [^:]*$
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
(string1+(string2d)*) 括號匹配按從左向右字符
cat /etc/centos-release |grep -o " [0-9]+." |grep -o "[0-9]+"
[[email protected] ~]#cat /etc/centos-release |grep -o "[0-9]+" |head -n1
cat /etc/centos-release
[[email protected] ~]#echo "welcome to maedu linux"|grep -o "[a-z]" |sort -n|uniq -c|sort -nr
nano編輯功能只有下邊註釋的功能不是很強大
ctrl 加按鍵
vi適合批量處理文件
vim比vi多顏色,而且顯示光標位置
vim針對配置文件加顏色
如果文件不存在用vim 會看出new邊
vim +行號 /etc/passwd 快速編輯
vim +/^rpc /etc/passwd 快速切換以rpc開頭行 PATTERN
空行算一段落
cp /etc/fstab f1
cp /etc/fstab f2
vim -b f1 f2 比較多個文件
有助於編輯修改文件
vim -m file 只讀方式打開文件
normal命令模式 主要在於查看文件內容
h左
j下
k上
l右
查看文件內容
w 下個單詞詞首
e 下一個單詞詞尾
b 前一個單詞詞首
H 是頁首
M頁中
L頁尾
0行首
$行尾
^非空字符首
G文件最後一行
10G10行
gg文件第一行
( 按句跳動 句子之前要有". " 點和" "空格算一句
) 按句跳動
{前段落
}後段落
x 刪除剪切光標處1個字符
p 黏貼光標後
r替換光標中字母
R替換 切換replace模式
~轉換大小寫
J刪除當前行換行符 非常有用
d 刪除光標下一個位置的字符
d$ y復制同d
d^ c 刪了並且切換插入,模式 同d
d0 u撤銷多個
dw U撤銷單行
de$ ctrl加r恢復最後一次操作
db .重復剛才操作
ndd
D等於d$
yy
p 黏貼下行
P 黏貼上行
0gu$ 變小寫字母
0gU$ 變大寫字母
10iwang esc 把wang黏貼100次
<start position>< command><end position>開始位置 命令 行尾位置
gU變大寫 gu變小寫
****重點 命令模式看不到輸入鍵所以謹慎一點
insert 從命令模式切換
i光標前
a光標後
o下單行
I行首
A行尾
O上單行
extended command 擴展的命令模式
:wq
:q q代表看了看沒有改
: wq!
:q!
:w another 另存為新文件
:r f1 把f1文件放進vi裏
;!hostname 直接在vi敲命令 然後在vi下不用退出可以直接看
:r!hostname 直接把命令放到vim裏
:#,# :2,5 行號
:2,5d 刪除2,5 或者2,+3d
:. 表示當前行
:$ 表示最後一行
:%表示全文文件
:/pat1/,/pat2/ 2個正則表達式定位
擴展vim:模式
.表示當前行
$表示最後一行
%全文相當於1,$
vim加顏色和文件有關 /etc 下是配置文件有顏色 ,而data則無顏色
:/pat1/,/pat2/
第一次被pat1模式匹配到行開始到,一直到part2結束 ,
pat正則表達式模式
:w file 將範圍內的行另存至指定文件中
: r file 在指定位置插入指定文件中所有內容
查找並替換
s/要查找的內容/替換內容/修飾符
:1,10s/bash/csh/ 1到10行csh替代bash 只替代行一個
:1,10s/bash/csh/g 1到10行csh替代bash g全局替換也就是全部
修飾符
gc全局替換,=每次都提前詢問
i 忽略大小寫
@可以作為分隔符 #也可以做分隔符
cp /etc/fstab /root/f2
vim /f2 用&代替 br/>:%[email protected]^[^#]@#@g
:%s/^UUID/#&/ 前邊搜索的字符串 用&代替
:%[email protected]^[[:space:]]{1,}.*@@g
查找字符串
/PATTERN
?PATTERM
N
n
ctrl加v [ 就是 \e 進入insert模式操作
echo -e "\e[31mred\e[0m"
^[[31mred^[[0m
\e \e
grep “^a”
句子之前要有". " 點空格算一句
( 上一句
)下一句
crontab -e 計劃任務
擴展正則表達式
搜索
/pattrn 光標所處文件尾部查找
?pattern 光標所處文件首部查找
n 與命令同方向
N 與命令反方向
u撤銷
U撤銷回到最早狀態 必須在行沒有離開
.重復剛才操作
命令模式
vim有26個寄存器,也就是剪切板 abcd...z 26個字母 字母寄存器可以共享
3”tyy 把3行放到寄存器t
‘’tp 就是粘貼t寄存器內容
10個數字寄存器,用0,1 ,2...9 0存放最近復制內容1存放最近刪除內容
寄存器不能再不同回話共享
2進制修改 vim編輯
dd if=/dev/zero of=f1 bs=1 count=3
hexdump -c f1
vim -b f1
:%!xxd 進入2進制模式
:%!xxd -r 退出
v進入可視化模式 v就是按光標位置可視化 VISUAL 模式
V進入可視化模式 按行來顯示
ctrl 加v 按矩形方式顯示
vim FILE1 FILE2 FILE3 多文件模式
:next 下一個
:prev 前一個
:first 第一個
:last 最後一個
:wall 保存所有
:wqall 退出所有
vim -o f1 f2 水平分割
vim -O f1 f2
ctrl加w 加下
ctrl加w s 給一個文件分屏(上下)
ctrl加w v 給一個文件分屏(左右)
:set nu 加行號
:set nonu 取消行號
~/.vimrc 放到用戶家目錄
set ic 忽略大小寫
set noic 不忽略大小寫
set ai 啟用行對其 縮進
set noai 取消縮進
set si 智能縮進
set nosi 取消智能縮進
set hlsearch 高亮搜索
set nohlsearch 禁用
syntax on 啟動語法高亮 /etc/passwd 有語法高亮
syntax off 取消語法蓋亮
:set list 顯示tab 換行符 ^I 和$ 顯示
:set nolist
:set fileformat=dos 開啟windows格式
unix
:set ff=dos|unix 簡寫windows或者unix格式
:set cursorline 設置光標所在行標識線set cul 簡寫
:set paste 保留復制的格式
:set all 看一下set 支持格式
:help 查看幫助
vimtutor 命令 這個幫助手冊可以隨便刪除br/>:%[email protected]/etc/sysconfig/[email protected]/var/[email protected]
[email protected]^#([[:space:]]{1,})@\[email protected]
shell腳本編程
指令+數據
過程試 以指令為中心,關註過程 ,數據服務指令
對象式 以數據為中心,關註對象 指令服務數據,
只關註每個塊的負責人,每塊的負責人負責每塊的
java, python gogo 面向對象
編譯: 高級語言-->編譯器-->目標代碼
編譯器程序員手工完成 ,由高級語言轉換成二進制語言
.java
高級語言 --->解釋器 ----> 機器代碼
解釋器直接轉換為二進制,如shell
shell腳本就是命令集合
順序執行 預先的排序
循環 不斷地執行某個代碼 著個處理
選擇執行 根據狀態做什麽事情 選擇條件判斷
shell編程:過程式, 解釋執行
頭腦清晰關註過程,寫好shell直接運行shell缺點不安全
高級語言文本,編譯二進制,之後目標代碼安全
shell基本結構 多個命令組合
變量、數組
表達式 a+b
語句if
shell 一般加 .sh 後綴
一般運行shell腳本 只要輸入絕對路徑或者相對路徑 前提是擁有x權限
如果程序想要運行
1種方法給$PATH 變量加路徑如/data /data下文件可以執行2進制
2把程序放到PATH變量路徑中
#!/bin/bash 首行shebang機制 首行標註語法寫出程序路徑
#!/bin/csh
要在文本裏首行加入
#!/bin/bash
shell腳本用途
自動化常用命令,
執行系統管理和故障排除
創建簡單的應用程序
處理文本或文件
不適合負雜問題處理
bash hello.sh 沒有執行權限也可以運行
cat hello.sh | bash 非常有用
ss -ntl 看端口啟沒啟動
curl http://192.168.30.128/hello.sh | bash 在別的遠程服務器執行shell腳本
把遠程的文件在主機上執行
腳本代碼開頭約定
1.第一行一般為調用使用的語言
2.程序名, 一般和功能息息相關,最好不建議漢字,能用英文最好用英文
3 版本號
4更改後的時間
5作者相關信息
6改程序的作用,以及註意事項
7最後各版本更新簡要說明
第6天grep正則表達式 ,vim,shell概念