溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

提升開發效率的Java命令行技巧有哪些

發布時間:2021-10-28 15:16:25 來源:億速云 閱讀:301 作者:iii 欄目:web開發

本篇內容主要講解“提升開發效率的Java命令行技巧有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“提升開發效率的Java命令行技巧有哪些”吧!

Mac 環境

  • zsh

  • on-my-zsh

  • plugin

  • git

  • autojump

  • osx(man-preview/quick-look/pfd(print Finder director)/cdf(cd Finder))

  • 常用快捷鍵(bindkey)

  • 演示: 高亮/git/智能補全/跳轉(j, d)...

Shell 基礎命令

which/whereis, 常用 whatis, man, --help

    ?  .oh-my-zsh git:(master)$ whereis ls /bin/ls?  .oh-my-zsh git:(master)$ which ls ls: aliased to ls -G

基本文件目錄操作

rm, mkdir, mv, cp, cd, ls, ln, file, stat, wc(-l/w/c), head, more, tail, cat...

利器 管道: |

Shell 文本處理

這里就是通過案例講了一下12個命令的大致用法和參數,可以通過點擊右邊的目錄(我博客有目錄,公眾號上木有)直達你想要了解的命令。

find, grep, xargs, cut, paste, comm join, sort, uniq, tr, sed, awk

find

  • 常用參數

  • 文件名 -name, 文件類型-type, 查找最大深度-maxdepth

  • 時間過濾(create/access/modify) -[cam]time

  • 執行動作 -exec

示例

find ./ -name "*.json" find . -maxdepth 7 -name "*.json" -type f find . -name "*.log.gz" -ctime +7 -size +1M -delete (atime/ctime/mtime) find . -name "*.scala" -atime -7 -exec du -h {} \;

grep

  • 常用參數

  • -v(invert-match),

  • -c(count),

  • -n(line-number),

  • -i(ignore-case),

  • -l, -L, -R(-r, --recursive), -e

示例

grep 'partner' ./*.scala -l grep -e 'World' -e 'first' -i -R ./  (-e: or)

相關命令: grep -z / zgrep / zcat xx | grep

xargs

  • 常用參數

  • -n(每行列數),

  • -I(變量替換)

  • -d(分隔符), Mac 不支持,注意與GNU版本的區別

示例

echo "helloworldhellp" | cut -c1-10 cut -d, -f2-8 csu.db.export.csv

cut

  • 常用參數

  • -b(字節)

  • -c(字符)

  • -f(第幾列),-d(分隔符),f 范圍: n, n-, -m, n-m

示例

echo "helloworldhellp" | cut -c1-10cut -d, -f2-8 csu.db.export.csv

paste

  • 常用參數

  • -d 分隔符

  • -s 列轉行

示例

    ?  Documents$ cat file1 1 11 2 22 3 33 4 44 ?  Documents$ cat file2 one     1 two     2 three   3 one1    4 ?  Documents$ paste -d, file1 file2 1 11, one     1 2 22, two     2 3 33, three   3 4 44, one1    4 ?  Documents$ paste -s -d: file1 file2 a 11:b bb:3 33:4 44 one     1:two     2:three   3:one1    4

join

類似sql中的 ...inner join ...on ..., -t 分隔符,默認為空格或tab

?  Documents$ cat j1 1 11 2 22 3 33 4 44 5 55 ?  Documents$ cat j2 one     1   0 one     2   1 two     4   2 three   5   3 one1    5   4 ?  Documents$ join -1 1 -2 3 j1 j2 1 11 one 2 2 22 two 4 3 33 three 5 4 44 one1 5

comm

  • 常用參數

  • 用法 comm [-123i] file1 file2

  • 字典序列, 3列: 只在file1/file2/both

  • - 去掉某列,i 忽略大小寫

示例

    ?  Documents$ seq 1 5 >file11 ?  Documents$ seq 2 6 >file22 ?  Documents$ cat file11 1 2 3 4 5 ?  Documents$ cat file22 2 3 4 5 6 ?  Documents$ comm file11 file22 1         2         3         4         5     6 ?  Documents$ comm -1 file11 file22     2     3     4     5 6 ?  Documents$ comm -2 file11 file22 1     2     3     4     5 ?  Documents$ comm -23 file11 file22 1

相關命令 diff(類似git diff)

sort

  • 常用參數

  • -d, --dictionary-order

  • -n, --numeric-sort

  • -r, --reverse

  • -b, --ignore-leading-blanks

  • -k, --key

示例

?  Documents$ cat file2 one     1 two     2 three   3 one1    4 ?  Documents$ sort file2one     1 one1    4 three   3 two     2 ?  Documents$ sort -b -k2 -r file2one1    4 three   3 two     2 one     1

uniq

  • 常用參數

  • -c 重復次數

  • -d 重復的

  • -u 沒重復的

  • -f 忽略前幾列

示例

?  Documents$ cat file4 11 22 33 11 11 ?  Documents$ sort file4 | uniq -c    3 11    1 22    1 33 ?  Documents$ sort file4 | uniq -d 11 ?  Documents$ sort file4 | uniq -u 22 33 ?  Documents$ cat file3 one     1 two     1 three   3 one1    4 ?  Documents$ uniq -c -f 1 file3    2 one     1    1 three   3    1 one1    4

注意:uniq比較相鄰的是否重復,一般與sort聯用

tr

  • 常用參數

  • -c 補集

  • -d 刪除

  • -s 壓縮相鄰重復的

示例

?  Documents$ echo '1111234444533hello' | tr  '[1-3]' '[a-c]' aaaabc44445cchello?  Documents$ echo '1111234444533hello' | tr -d '[1-3]' 44445hello?  Documents$ echo '1111234444533hello' | tr -dc '[1-3]' 11112333?  Documents$ echo '1111234444533hello' | tr -s '[0-9]' 123453hello?  Documents$ echo 'helloworld' | tr '[:lower:]' '[:upper:]' HELLOWORLD

sed

  • 常用參數

  • -d 刪除

  • -s 替換, g 全局

  • -e 多個命令疊加

  • -i 修改原文件(Mac下加參數 "",備份)

示例

    ?  Documents$ cat file2 one     1 two     2 three   3 one1    4 ?  Documents$ sed "2,3d" file2 one     1 one1    4 ?  Documents$ sed '/one/d' file2 two     2 three   3 ?  Documents$ sed 's/one/111/g' file2 111     1 two     2 three   3 1111    4 #將one替換成111 并將含有two的行刪除 ?  Documents$ sed -e 's/one/111/g' -e '/two/d' file2 111     1 three   3 1111    4 # ()標記(轉義), \1 引用 ?  Documents$ sed 's/\([0-9]\)/\1.html/g' file2 one     1.html two     2.html three   3.html one1.html    4.html # 與上面一樣 & 標記匹配的字符?  Documents$ sed 's/[0-9]/&.html/g' file2 one     1.html two     2.html three   3.html one1.html    4.html ?  Documents$ cat mobile.csv"13090246026" "18020278026" "18520261021" "13110221022" ?  Documents$ sed 's/\([0-9]\{3\}\)[0-9]\{4\}/\1xxxx/g' mobile.csv "130xxxx6026" "180xxxx8026" "185xxxx1021" "131xxxx1022"

awk

  • 基本參數和語法

  • NR 行號, NF 列數量

  • $1 第1列, $2, $3...

  • -F fs fs分隔符,字符串或正則

語法: awk 'BEGIN{ commands } pattern{ commands } END{ commands }', 流程如下:

  • 執行begin

  • 對輸入每一行執行 pattern{ commands }, pattern 可以是 正則/reg exp/, 關系運算等

  • 處理完畢, 執行 end

示例

?  Documents$ cat file5 11  11 aa cc 22  22 bb 33  33 d 11  11 11  11 #行號, 列數量, 第3列 ?  Documents$ awk '{print NR"("NF"):", $3}' file5 1(4): aa 2(3): bb 3(3): d 4(2): 5(2): #字符串分割, 打印1,2列 ?  Documents$ awk -F"xxxx" '{print $1, $2}' mobile.csv "130 6026" "180 8026" "185 1021" "131 1022" #添加表達式?  Documents$ awk '$1>=22 {print NR":", $3}' file5 2: bb3: d#累加1到36,奇數,偶數 ?  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/' question: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 = 666 ?  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} $1 % 2 ==1 {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/' question: 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 + 21 + 23 + 25 + 27 + 29 + 31 + 33 + 35 = 324 ?  Documents$ seq 36 | awk 'BEGIN{sum=0; print "question:"} $1 % 2 !=1 {print $1" +"; sum+=$1} END{print "="; print sum}' | xargs | sed 's/+ =/=/' question: 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16 + 18 + 20 + 22 + 24 + 26 + 28 + 30 + 32 + 34 + 36 = 342

其他高級語法:for, while 等, 各種函數等,本身awk是一個強大的語言,可以掌握一些基本的用法。

實際應用

日志統計分析

例如拿到一個nginx日志文件,可以做很多事情,比如看哪些請求是耗時最久的進而進行優化,比如看每小時的"PV"數 等等。

?  Documents$ head -n5 std.nginx.log 106.38.187.225 - - [20/Feb/2017:03:31:01 +0800] www.tanglei.name "GET /baike/208344.html HTTP/1.0" 301 486 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382" "106.38.187.225, 106.38.187.225" - 0.000 106.38.187.225 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /baike/208344.html HTTP/1.0" 301 486 "-" "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) 360JK yunjiankong 975382" "106.38.187.225, 106.38.187.225" - 0.000 10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] stdbaike.bdp.cc "POST /baike/wp-cron.php?doing_wp_cron=1487532662.2058920860290527343750 HTTP/1.1" 200 182 "-" "WordPress/4.5.6; http://www.tanglei.name/baike" "10.130.64.143" 0.205 0.205 10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /external/api/login-status HTTP/1.0" 200 478 "-" "-" "10.130.64.143" 0.003 0.004 10.130.64.143 - - [20/Feb/2017:03:31:02 +0800] www.tanglei.name "GET /content_util/authorcontents?count=5&offset=0&israndom=1&author=9 HTTP/1.0" 200 11972 "-" "-" "10.130.64.143" 0.013 0.013

上面是nginx的一個案例, 例如希望找到top 10 請求的path:

head -n 10000 std.nginx.log | awk '{print $8 ", " $10}' | grep ',404' | sort | uniq -c | sort -nr -k1 | head -n 10 #orhead -n 10000 std.nginx.log | awk '$10==404 {print $8}' |sort | uniq -c | sort -nr -k1 | head -n 10

當然,你可能一次不會直接處理成功,一般會先少拿一部分數據進行處理看邏輯是否正常, 或者你可以緩存一些中間結果.

cat std.nginx.log | awk '{print $8 "," $10}' | grep ',404' >404.log sort 404.log | uniq -c | sort -nr -k1 | head -n 10

再比如每小時請求數量,請求耗時等等

?  Documents$ head -n 100000 std.nginx.log | awk -F: '{print $1 $2}' | cut -f3 -d/ | uniq -c 8237 201703 15051 201704 16083 201705 18561 201706 22723 201707 19345 201708

其他實際案例 ip block

案例: db數據訂正

背景: 因為某服務bug,導致插入到db的圖片路徑不對,需要將形如(安全需要已經將敏感數據替換)  https://www.tanglei.name/upload/photos/129630//internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg  替換成  http://www.tanglei.me/internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg,因為mysql等db貌似不支持直接正則的替換,所以不能夠很方便的進行寫sql進行替換(就算支持,直接改也有風險的,還是先備份再修改留個“后悔藥”)。

當然將數據導出,然后寫 python 等腳本處理也是一種解決方案,但如果用上面的命令行處理,只需要幾十秒即可完成。

步驟:

  • 準備數據

select id, photo_url_1, photo_url_2, photo_url_3 from somedb.sometable where  photo_url_1 like 'https://www.tanglei.name/upload/photos/%//internal-public/%' or photo_url_2 like 'https://www.tanglei.name/upload/photos/%//internal-public/%' or photo_url_3 like 'https://www.tanglei.name/upload/photos/%//internal-public/%';
  • 替換原文件 一般在用sed替換的時候,先測試一下是否正常替換。

#測試是否OK head -n 5 customers.csv | sed 's|https://www.tanglei.name/upload/photos/[0-9]\{1,\}/|http://www.tanglei.me|g' # 直接替換原文件, 可以sed -i ".bak" 替換時保留原始備份文件 sed -i "" 's|https://www.tanglei.name/upload/photos/[0-9]\{1,\}/|http://www.tanglei.me|g' customers.csv
  • 拼接sql, 然后執行

awk -F, '{print "update sometable set photo_url_1 = " $2, ", photo_url_2 = " $3, ", photo_url_3 = " $4, " where id = " $1 ";" }' customers.csv > customer.sql #然后執行sql 即可

其他

  • play framework session

老方式: 需要啟play環境,慢。新方式直接命令行解決。

sbt "project site" consoleQuick import play.api.libs._val sec = "secret...secret" var uid = "10086" Crypto.sign(s"uid=$uid", sec.getBytes("UTF-8")) + s"-uid=$uid"  ?  Documents$  ~/stdcookie.sh 97522 918xxxxdf64abcfcxxxxc465xx7554dxxxx21e-uid=97522 ?  Documents$ cat ~/stdcookie.sh#!/bin/bash ##  cannot remove this line uid=$1 hash=`echo -n "uid=$uid" | openssl dgst -sha1 -hmac "secret...secret"` echo "$hash-uid=$uid"

統計文章單詞頻率: 下面案例統計了川普就職演講原文中詞頻最高的10個詞。

?  Documents$ head -n3 chuanpu.txt Chief Justice Roberts, President Carter, President Clinton, President Bush, President Obama, fellow Americans and people of the world, thank you. We, the citizens of America, are now joined in a great national effort to rebuild our country and restore its promise for all of our people. Together we will determine the course of America and the world for many, many years to come. ?  Documents$ cat chuanpu.txt | tr -dc 'a-zA-Z ' | xargs -n 1 | sort | uniq -c | sort -nr -k1 | head -n 20   65 the   63 and   48 of   46 our   42 will   37 to   21 We   20 is   18 we   17 America   15 a   14 all   13 in   13 for   13 be   13 are   10 your   10 not   10 And   10 American
  • 隨機數:比如常常新注冊一個網站,隨機生成一個密碼之類的。

?  Documents$ cat /dev/urandom | LC_CTYPE=C tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 5 cpBnvC0niwTybSSJhUUiZwIz6ykJxBvu VDP56NlHnugAt2yDySAB9HU2Nd0LlYCW 0WEDzpjPop32T5STvR6K6SfZMyT6KvAI a9xBwBat7tJVaad279fOPdA9fEuDEqUd hTLrOiTH5FNP2nU3uflsjPUXJmfleI5c ?  Documents$ cat /dev/urandom | head -c32 | base64 WoCqUye9mSXI/WhHODHDjzLaSb09xrOtbrJagG7Kfqc=
  • 圖片處理壓縮,可批量改圖片大小等等 sips

?  linux-shell-more-effiency$ sips -g all which-whereis.png /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png   pixelWidth: 280  pixelHeight: 81  typeIdentifier: public.png  format: png  formatOptions: default  dpiWidth: 72.000  dpiHeight: 72.000  samplesPerPixel: 4  bitsPerSample: 8  hasAlpha: yes  space: RGB  profile: DELL U2412M?  linux-shell-more-effiency$ sips -Z 250 which-whereis.png /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png   /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png ?  linux-shell-more-effiency$ sips -g all which-whereis.png /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png   pixelWidth: 250  pixelHeight: 72  typeIdentifier: public.png  format: png  formatOptions: default  dpiWidth: 72.000  dpiHeight: 72.000  samplesPerPixel: 4  bitsPerSample: 8  hasAlpha: yes  space: RGB  profile: DELL U2412M?  linux-shell-more-effiency$ sips -z 100 30 which-whereis.png /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png   /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png ?  linux-shell-more-effiency$ sips -g pixelWidth -g pixelHeight which-whereis.png /Users/tanglei/Documents/linux-shell-more-effiency/which-whereis.png   pixelWidth: 30  pixelHeight: 100
  • 命令行處理 JSON 的神器:隨著 JSON 通用性,常常需要處理 JSON 數據,這里推薦這個命令行 JSON 處理神器 jq is a  lightweight and flexible command-line JSON processor[1]

到此,相信大家對“提升開發效率的Java命令行技巧有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女