檔案的高階命令-檔案處理三劍客
阿新 • • 發佈:2021-06-24
檔案的高階命令
昨天的vim的補充
在螢幕中游標快速移動 H: 游標移動到這個螢幕的最上方那一行的第一個字元 M: 游標移動到這個螢幕的中央那一行的第一個字元 L: 游標移動到這個螢幕的最下面一行的第一個字元 查詢替換 語法格式: : 行數 s/被替換字元/替換字元/ :1,3 s/egon/Egon/ # 把1到3行的第一個egon替換成Egon :5,$ s/egon/EGON/g # 把第五行到最後一行的所有egon換成EGON, 後面的g是全域性的意思 :% s/egon/EGON/g # %代表全文的意思,把全文的egon替換成EGON :% s/^#// # 第一個雙斜槓裡面可以是正則表示式^表示以什麼開頭,這段程式碼意思是將全文以#開頭的替換成空 讀入寫入檔案 :w /aaa.txt # 另存為根目錄下的aaa.txt :1,3 w /2.txt # 將1到3行另存到根下的2.txt :r /ect/hosts # 將/ect/hosts的內容讀到當前檔案 設定環境 :set nu # 設定行號 :set ic # 不區分大小寫 :set ai # 自動縮排 :set nonu # 取消設定行號 :set noic # 取消區分大小寫 同時編輯多個檔案 vim -o /home/qwe/1.txt /ect/hosts 同時編輯這兩個檔案,按ctrl+w+w 切換,,儲存退出需要執行兩次,小o是水平分割,大O是垂直分割 vimdiff /home/qwe/1.txt /etc/host 對比檔案,按ctrl+w+w 切換,儲存退出需要執行兩次,不同的內容高亮顯示 用echo往檔案中新增內容 [root@localhost ~]# echo '123' >> /home/qwe/2.txt [root@localhost ~]# cat /home/qwe/2.txt 123 可視塊操作: 按ctrl+v進入即可 在這個頁面可以通過方向鍵選中內容,進行一個增刪改查的操作 """ 檔案在修改的時候,系統會從硬碟拿出一部分空間來存放你臨時修改的檔案,以.開頭.swp結尾的檔案,所以如果檔案在沒有儲存的情況下關閉是不會有事的,是可以找的回來的,但是要是這個臨時檔案,沒了,那就是真的沒了。 """
檔案處理命令三劍客之sed
流式編輯器,主要擅長對檔案的編輯操作。 語法格式: sed -選項(一般都是r) '定位 + 命令' 檔案路徑 選項: -n 取消預設輸出 -r 支援擴充套件正則元字元 -i 立即編輯檔案 定位: 行定位: n代表定位到n行; n,m表示從第n行到第m行; 不寫代表所有行 正則定位: /^str/ 以str開頭的一行; /str$/ 以str結尾的一行; /str/ 包含str的行; 命令: p: 列印定位的那一行,原本的這一行也會輸出。 d: 刪除得的這一行。 c: 改變這一行。 s: 替換這一行。 行定位: [root@localhost ~]# sed -r '' /home/qwe/1.txt 111 egon222 33egon3egon3333egon 444 # ''不寫預設就是全部列印 egon55egon5egon 666 777egon [root@localhost ~]# sed -r '2p' /home/qwe/1.txt 111 egon222 egon222 # 對第二行多列印一次 33egon3egon3333egon 444 egon55egon5egon 666 777egon [root@localhost ~]# sed -r '2d' /home/qwe/1.txt 111 33egon3egon3333egon 444 # 刪除第二行 egon55egon5egon 666 777egon [root@localhost ~]# sed -r '3c xxxx' /home/qwe/1.txt 111 egon222 xxxx # 把第三行全部替換成xxxx 444 egon55egon5egon 666 777egon [root@localhost ~]# sed -r '5s/egon/EGON/g' /home/qwe/1.txt 111 egon222 33egon3egon3333egon 444 EGON55EGON5EGON # 把第五行的小寫egon全部替換成大寫EGON 666 777egon [root@localhost ~]# '''==================================================================================''' 正則定位: [root@localhost ~]# sed -r '' /home/qwe/1.txt 111 egon222 # 33egon3egon3333egon 444 egon55egon5egon 666 777egon [root@localhost ~]# sed -r '/^egon/d' /home/qwe/1.txt 111 33egon3egon3333egon # 刪除以egon開頭的所有行 444 666 777egon [root@localhost ~]# sed -r '/egon$/c xxxx' /home/qwe/1.txt 111 egon222 xxxx # 將以egon結束的所有行替換成 xxxx 444 xxxx 666 xxxx [root@localhost ~]# sed -r '/egon/s/egon/EGON/g' /home/qwe/1.txt 111 EGON222 33EGON3EGON3333EGON # 將包含egon的行裡面的所有egon替換成EGON 444 EGON55EGON5EGON 666 777EGON [root@localhost ~]# # 修改檔案內容,在r後面加一個i就可以修改,前提是確定要修改之後在修改 [root@localhost ~]# sed -ri '/egon/s/egon/EGON/g' /home/qwe/1.txt [root@localhost ~]# cat /home/qwe/1.txt 111 EGON222 33EGON3EGON3333EGON 444 EGON55EGON5EGON 666 777EGON [root@localhost ~]# ps: 替換後面的g後面可以根一個i,表示大小寫不在意
檔案處理三劍客之awk
語法格式: awk -F指定分隔符 '指定行{print 第幾列}' 檔案路徑 NR: 記錄號 NF: 以-F分割符分割的段數 指定行: 比較運算: NR >= 3 && NR <=5 表示從第三行到第五行 NR <= 3 || NR >=4 表示小於等於三的行數和大於等於五的行數 正則表示式 /^str/ 以str開頭的一行; /str$/ 以str結尾的一行; /str/ 包含str的行; [root@localhost ~]# cat -n /home/qwe/1.txt 1 t: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 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/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 [root@localhost ~]# awk -F: 'NR >=3 && NR <=7{print $1,$3}' /home/qwe/1.txt daemon 2 # 以:分割,找到行數大於等於3 並且 小於等於7 然後打印出每一行第一列和第三列,中間逗號代 表空格 adm 3 lp 4 sync 5 shutdown 6 [root@localhost ~]# awk -F: 'NR <=2 || NR >= 11{print $1">>>"$NF}' /home/qwe/1.txt # 以:分割,找到小於等於2並且大於等於11,然後打印出第一列和最後一列,中間用>>>連線 t>>>/bin/bash bin>>>/sbin/nologin games>>>/sbin/nologin ftp>>>/sbin/nologin [root@localhost ~]# awk -F: '/bash$/{print $1,$NF}' /home/qwe/1.txt # 找到以bash結尾的一行,然後打印出第一列和最後一列 t /bin/bash ''' 行數不寫,預設所有文字 '''
檔案處理三劍客之grep
語法:
grep 選項 '正則' 檔案路徑
選項:
-n: 再過濾出來的每一行前面加上它在檔案中的相對行號
-i: 忽略大小寫
-R, -r: 遞迴
-l: 如果匹配不成功,則只將檔名打印出來,失敗則不列印,通常-rl一起用
[root@localhost ~]# grep -n 'root' /etc/passwd
# 過濾出包含root的行,
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n '^root' /etc/passwd
# 過濾出以root開頭的行
1:root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep -n 'root$' /etc/passwd
[root@localhost ~]# grep -l 'root$' /etc/passwd
[root@localhost ~]# grep -n 'bash$' /etc/passwd
# 過濾以bash結尾的行
1:root:x:0:0:root:/root:/bin/bash
21:lyh:x:1000:1000:lyh:/home/lyh:/bin/bash
27:qwe:x:1001:1001::/home/qwe:/bin/bash
28:asd:x:1002:1002::/home/asd:/bin/bash
[root@localhost ~]#
[root@localhost ~]# grep -rl 'ip' /boot/grub2/locale/
# 遞迴過濾,/boot/grub2/locale/這個資料夾下面含有ip的檔名
/boot/grub2/locale/ast.mo
/boot/grub2/locale/ca.mo
/boot/grub2/locale/da.mo
/boot/grub2/locale/de.mo
/boot/grub2/locale/[email protected]
/boot/grub2/locale/de_CH.mo
.................
[root@localhost ~]#
[root@localhost ~]# ps aux | grep bash
root 1660 0.0 0.3 116732 3208 tty1 Ss+ 14:35 0:00 -bash
root 2300 0.0 0.3 116832 3488 pts/1 Ss 16:00 0:00 -bash
root 2576 0.0 0.0 112824 968 pts/1 R+ 16:49 0:00 grep --color=auto bash
'''
三劍客命令都支援管道
'''