Command Tips
正則工具
vim 批次編碼轉換
vim +"argdo se nobomb| set nomore | se fenc=utf8 | w" $(find . -type f -iname '*.java')
去除 Delete Newlines (CRLF) with sed or use dos2unix
find . -iname '*.cpp' -exec sed -i 's/\r//g' {} \;
find . -type f -iname "*.c" | xargs dos2unix
如何用 shell 從變數中截取出檔名和副檔名呢?
取副檔名:extension="${filename##*.}"
取檔名:filename="${filename%.*}"
一行指令迴圈
while true; do echo "hello"; sleep 2; done
pdftotext
find . -iname '*.pdf' -print -exec pdftotext '{}' - \; | grep --color -i "unix"
把檔名裡面的所有空白換成底線
rename 's/\ /_/g' *
檔案大寫轉小寫
find -type f -exec rename 's/[A-Z]/\L$&/g' {} \;
Linux 批次修改副檔名
把副檔名抓成 IMG0000.jpg.jpg ,但我預期的副檔名應該是 IMG0000.jpg
rename -v 's/\.jpg.jpg$/\.jpg/' *.jpg
sed 替換字串使用正則
.. image:: /_static/seq_Mediator.jpg
替換成![](../_static/seq_Mediator.jpg)
echo ".. image:: /_static/SimpleFactory.jpg"|sed -r 's/^.*:: (.*)/![](\1)/'
![](/_static/SimpleFactory.jpg)
(.*)
// pattern /_static/SimpleFactory.jpg
\1
// 代表是第一組 pattern 即是 /_static/SimpleFactory.jpg
echo ".. image:: /_static/SimpleFactory.jpg"|sed -r 's/^.*:: (.*)/![]\1/'
![]/_static/SimpleFactory.jpg
find . -name '*.rst' -exec sed -ri.bak 's/^.*:: (.*)/![](\.\.\1)/' {} \;
用 uniq 和 sort 指令清除重複行和空白行
sort chtuniq.txt | uniq > result.txt
上面這行指令只能留下不重覆的行,所以,還是會有一個空白行的哩 !
sort chtuniq.txt | uniq | sed /^$/d > result.txt
為什麼在用 uniq 指令前要先用 sort 指令來排序一下呢 ? 這是因為 uniq 指令只跟上一行比對是否有重複而已,所以,如果重複的資料不排在一起,那麼 uniq 指令就等於是無效哩 ! 所以,在使用 uniq 指令前,要先搖一搖,喔 ! 不! 是要先用 sort 指令排一排哩 !
nohup &
nohup make 2>&1 > make.log &
在 Linux 上找出空目錄, 而且刪掉它
find /tmp -depth -empty -type d
find /tmp -depth -empty -type d -exec rmdir -v {} \;
查詢檔案大小幾G
du -h -d 1 | grep [0-9]G
basename & dirname
basename /usr/local/etc
etc
這個指令會將後面的[目錄]僅擷取出最後面的那個目錄或檔案
dirname /usr/local/etc
/usr/local
恰恰與 basename 相反,他僅是秀出來前面的『目錄』部分喔!
取副檔名 & 取檔名
取副檔名:extension="${filename##*.}"
取檔名:filename="${filename%.*}"
## 是從變數內容的前面,移除與 ## 後面定義的 pattern (也就是 *.) 相符合的部分(越長越好),
因此檔名的部分加上 . 就會被移除,留下最後面的副檔名~
% 是從變數內容的後面,移除與 % 後面定義的 pattern (也就是 .*) 相符合的部分(越短越好),
因此 .副檔名 就會被移除掉,留下前面的檔名部分~
Crontab 定時
0 3,6 * * * /usr/bin/nohup /usr/bin/python /home/xxx/xx.py 2>&1 | tee /tmp/xx.log &
- 編輯crontab檔案
crontab -e
- 刪除crontab檔案
crontab -r
- restart
/etc/init.d/cron restart
Linux : BIG-5 與 UTF-8 檔案轉換
- Big-5 To Utf-8
iconv -f big5 -t utf-8 big5.txt -o utf8.txt
- Utf-8 To Big-5
iconv -f utf-8 -t big5 utf8.txt -o big5.txt
檔案第一行加入字串
sed -i '1i\<meta http-equiv="content-type" content="text/html; charset=UTF-8">' *.md
search for a Word in jar files
find . -name "*.jar" -exec zipgrep "toAxisAngle" '{}' \;
用find和cp組合實現將find出來的文件批量拷貝到目標文件夾
find . -name *.jar | xargs -i cp {} ~/jar_files/
sed 刪除關鍵字串那行
find . -name '*.java' -exec sed -i '/System\.out\.println/d' {} \;
查看各目錄大小
du -h --max-depth=1
搜尋隱藏檔案內容
find . -maxdepth 2 -type f -iname ".*" | xargs ag 'vim'
htclog device log 多個檔案合併成一個
ls -t device_i0021_000* | xargs cat > ~/aa