今天進度 : 鳥哥的 Linux 私房菜 -- 第十一章、正規表示法與文件格式化處理
另外今天額外學到 awk 進階應用 : 批量執行命令
學習1 : 找出某某用戶下的所有進程,並生成對應的刪除命令
➜ demo ps -ef|grep test
test 1326 1 0 Sep13 ? 00:00:00 /lib/systemd/systemd --user
test 1327 1326 0 Sep13 ? 00:00:00 (sd-pam)
test 1333 742 0 Sep13 tty1 00:00:00 -bash
test 3049 1333 0 Sep14 tty1 00:00:00 vi /etc/netplan/50-cloud-init.yaml
root 21054 1191 0 01:26 ? 00:00:00 sshd: test [priv]
test 21183 21054 0 01:26 ? 00:00:00 sshd: test@pts/0
test 21184 21183 0 01:26 pts/0 00:00:00 -zsh
test 21423 21184 0 01:41 pts/0 00:00:00 ps -ef
test 21424 21184 0 01:41 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox test
➜ demo ps -ef|grep test |awk '{print "kill -9 "$2}'
kill -9 1326
kill -9 1327
kill -9 1333
kill -9 3049
kill -9 21054
kill -9 21183
kill -9 21184
kill -9 21432
kill -9 21433
kill -9 21434
學習2 : 藉由 awk + xargs 執行批量改名命令
例子 :
➜ demo touch file{0..10}.txt
➜ demo ls
file0.txt file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
➜ demo ls | awk '{print $NF}' | xargs -I {} mv {} update_{}
➜ demo ls
update_file0.txt update_file1.txt update_file3.txt update_file5.txt update_file7.txt update_file9.txt
update_file10.txt update_file2.txt update_file4.txt update_file6.txt update_file8.txt
學習3 : 同樣能使用 bash 達到執行批量命令效果
例子 : 快速將資料夾下面的檔案按順序批量命名
➜ demo touch file{1..10}.txt
➜ demo ls
file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
➜ demo num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done
➜ demo ls
0000.txt 0001.txt 0002.txt 0003.txt 0004.txt 0005.txt 0006.txt 0007.txt 0008.txt 0009.txt