Linux Shell指令碼攻略筆記2之命令之樂

2021-07-13 11:25:04 字數 4479 閱讀 8216

cat

檔案拼接

cat 1.txt 2.txt 

擺脫多餘空白行

$ cat -s ss.tst

或者tr  $ cat ss.tst |tr -s '\n'

顯示行號 -n 

$ cat -n ss.tst 

錄屏 $ script -t 2> timing.log -a output.session

exit結束

回放 $ scriptreplay timing.log output.session

xargs

單行->多行;多行->單行

stu2452@ubuntu:~/shell$ cat examle.txt 1

2  3 4 5  6

78    9

$ cat examle.txt | xargs 

1 2 3 4 5 6 7 8 9

$ cat examle.txt | xargs -n3

1 2 3

4 5 6

7 8 9

指定分隔符 -d

$ echo "spamxspamxspamxspamxspam"|xargs -d x -n2

spam spam

spam spam

spam

xargs實現迴圈

$ ls "*.txt" | xargs -n1 -i{} mv {} {}.bak

結合find使用

$ find . -type f -name "*.bak" -print0 | xargs -0 rm -f

注:find的輸出做xarg輸入必須將-print0 與find結合使用,以字元null('\0')來分割輸出

統計c 原始碼中有多少行

$ find . -type f -name "*.c" -print0 | xargs -0 wc -l

34 ./jsq.c

26 ./hws.c

24 ./1.c

29 ./ww

www.c

29 ./huiwenshu.c

142 total

find 

-atime  訪問時間

-mtime  內容修改時間

-ctime  元資料(許可權,屬主)改變

-7 7天內            -amin

7 7天前            -mmin

+7 超過7天            -cmin

比file1 修改時間更近

$ find . -type f -newer file1 -print

基於檔案大小

$ find . -type f -size +2k

基於許可權

$ find . -type f -perm 644

刪除匹配檔案

$ find . -type f -perm 644 -delete

結合 -exec

$ find . -type f -user root -exec chown dog {} \;

$ find . -type f -name "*.c" -exec cat {} \; > c_file.txt

tr 大寫轉小寫

#echo "hello world" | tr 'a-z' 'a-z'

加密,解密

$ echo "i am a student,do you want to make friend with me?" | tr 'a-za-z' 'n-za-mn-za-m'

v nz n fghqrag,qb lbh jnag gb znxr sevraq jvgu zr?

$ echo "v nz n fghqrag,qb lbh jnag gb znxr sevraq jvgu zr?" | tr 'a-za-z' 'n-za-mn-za-m'

i am a student,do you want to make friend with me?

製表符轉空格

$ tr '\t' ' ' 

刪除字元

$ cat 1_1.sh |tr -d 'echo'

壓縮字元 -s

$ echo "gun      is   not a      linux." | tr -s ' '

gun is not a linux.

擦除多餘空格符

$ cat sum.txt | tr -s '\n'

字元類[:alnum:]  :字母數字

[:alpha:]  :字母

[:blank:]  :

all horizontal whitespace

[:cntrl:]  :控制(非列印)字元

[:digit:]  :數字

[:graph:]  :圖形字元

[:lower:]  :小寫

[:print:]  :可列印字元

[:punct:]  :標點符號

[:space:]  :空白字元

[:upper:]  :大寫

[:xdigit:]  :16進製制字元

[=char=]:

all characters which are equivalent to char

$ echo "hello world" | tr '[:lower:]' '[:upper:]'

hello world

校驗與核實md5sum

$ md5sum 1.c > 1.c.md5

$ md5sum -c 1.c.md5

1.c: ok   沒改變

對目錄進行校驗

$ md5deep -rl python ./python > dir_md5.txt

-r   使用遞迴方式

-l   使用相對路徑,預設絕對路徑

結合-exec 使用

$ find . type f -print0 | xargs -0 md5sum >> dir.txt

$ md5sum -c dir_md5.txt

sort

按數字排序輸出到檔案

$ sort -n 1.txt 2.txt -o sorted.txt

-r  逆序

-m  按月份

-m  合併兩個已經排序的檔案

$ sort  1.txt 2.txt |uniq   排序不重行

-c  檢查檔案是否排序 echo $? 檢視結果

-k  指定哪個鍵排序

$ sort -nrk 3 3.txt  按第三列按數字逆序

uniq 

-c  統計重複行數目

-d  找出重複行

臨時檔案命名與隨機數

$ mktemp    建立臨時檔案

/tmp/tmp.fmbpewywo5

$ mktemp -d     建立臨時目錄

/tmp/tmp.nc9flswhtm

$ mktemp -u     不建立檔案,只取名字

/tmp/tmp.cbf2yy4duu

$ mktemp test.***   根據模板建立檔名

test.7hv

分割檔案split

$ split -b 10k date.file    按位元組

$ split -l 10 date.file    按行數,10行

$ split -b 10k date.file -d -a 4 split_file

split_file0001 split_file0002 ...

$ csplit server.log /server/ -n 2 -s  -f server -b "%02d.log" ; rm server00.log    

根據拓展檔名切分檔案    

$ var=

www.dlmu.edu.cn

$ echo $

www.dlmu.edu.cn

$ echo $

www.dlmu.edu

$ echo $

www$ echo $

dlmu.edu.cn

$ echo $ cn

rename

將檔名小寫便大寫

$ rename 'y/a-z/a-z/' *

把***檔案移到***目錄

find -type f -name "*.***" -exec mv {} ***/ \;

把所有檔案空格換為字元'_'

$ find . -type f -exec rename 's/ /_/g' {} \;

look and

roid  查字典是否拼寫錯誤

利用並行程序加速執行

#!/bin/bash

pidarray=()

for file in 1.sh 2.sh 1_1.sh 2_1.sh 6.sh do

md5sum $file &

pidarray+=("$!")

done

wait $

linux shell 指令碼攻略第3版 讀書筆記

第2章 1shell會擴充套件沒有引號或是出現在雙引號 中 的萬用字元。單引號能夠阻止shell擴充套件 txt,使得該字串能夠原封不動地傳給find命令。2find 命令 如果需要用到正規表示式使用單引號 例如 查詢 home slynux下面 所有以txt結尾的檔案並列印出來 find home...

Linux Shell指令碼攻略(三)

一.find命令 1.根據檔名或正規表示式匹配搜尋 2.基於目錄深度的搜尋 maxdepth mindepth 3.根據檔案型別搜尋 4.根據檔案時間搜尋 atime 訪問時間 mtime 修改時間 ctime 變化時間 eg find type f atime 7 print 最近7天訪問的檔案 ...

linux shell指令碼攻略 一

變數數 算 重定向陣列 別名終端資訊 日期相關 除錯指令碼 函式和引數 管道命令 字段分隔符和迭代器 迴圈算術比較 檔案系統相關測試 字串比較 日期內容 格式星期 a 例如 sat a 例如 saturday 月 b 例如nov b 例如 november 日 d 例如31 固定格式日期 d 例如 ...