国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        Linux系統中文本處理三大法寶,哪個是你的最愛?

        2021-06-10 09:21
        道哥分享
        關注

        使用 Linux 系統的開發者,很多人都有自己喜歡的系統命令,下面這個幾個命令令是我平常用的比較多的,分享一下。

        我不會教科書般的羅列每個指令的詳細用法,只是把日常開發過程中的一些場景下,經常使用的命令常見用法進行演示。

        希望對您有小小的幫助~~也非常歡迎各位大俠,在留言區分享您的私房命令。

        No.1 grep

        grep、awk、sed 這三個指令,作為 Linux 系統中文本處理的三大法寶,我最喜歡、最常用的就是 grep 指令,沒有之一!

        它的基本用法是:

        grep [OPTIONS] PATTERN [FILE...]
        grep [OPTIONS] [-e PATTERN]...  [-f FILE]...  [FILE...]

        看起來有那么的選項,我最常用的是這 2 個場景:

        1. 在一個文件或者文件夾中,查找指定的字符串:

        grep -rni "pthread" *

        -r: 遞歸查找;
        -n:打印行號;
        -i: 不區分大小寫;

        2. 查看某個進程的相關信息,例如:進程 ID

        $ ps -aux | grep bash
        root  4681  0.0  0.1  24892  5912 pts/3    Ss   10:10   0:00 bash
        root 18052  0.0  0.0  15968   960 pts/3    S+   13:38   0:00 grep --color=auto bash

        可以看到,結果中出現了 grep 這個指令自身的進程信息,可以通過 -v 選項過濾掉它:

        $ ps -aux | grep bash | grep -v grep
        root  4681  0.0  0.1  24892  5912 pts/3    Ss   10:10   0:00 bash

        最后,再結合 awk 命令,就可以把進程ID 4681 提取出來了:

        $ ps -aux | grep bash | grep -v grep | awk  '{print $2}'
        4681

        在一些腳本工具中,這樣的用法還是很常見的。

        例如:在一些守護進程的啟動腳本中,都會利用這條指令來判斷:當前系統中是否已經有一個實例正在運行了。

        No.2 q

        看到這個指令,您一定會疑惑:僅僅一個字母 q,這是何方神圣?

        Linux 系統中壓根就沒有這個命令!

        是的,這個字母僅僅是一個 alias(別名)。

        我有很強的強迫癥,在終端窗口執行一條命令的時候,我經常會需要確認指令是否執行正確。

        在 Linux 系統中,$? 用來表示最后命令的退出狀態: 0 表示沒有錯誤,其他表示有錯誤。

        因此,在執行完一條命令后,可以執行下面的這條命令來確認:剛才執行的那條命令是否成功了。

        echo $?

        強迫癥的問題是解決了,但是由于這條指令使用的太頻繁了,需要敲那么多的字符,還要結合 shift 按鍵。

        于是我就給它設置了一個 alias(別名)。

        設置 alias 的方法估計都知道啊,就是在個人家目錄下的 .bashrc 中修改。

        我的 alias 設置如下:

        alias ll='ls -lF'
        alias la='ls -A'
        alias l='ls -CF'
        alias q='echo $?'

        這樣的話,每次執行完一條系統命令之后,隨手敲一個字母 q 就可以檢查執行結果了,省時省力!

        No.3 pwd

        可能有些人會奇:pwd 怎么會是常用命令呢?它的作用是打印當前路徑,在命令行窗口中,路徑是一直顯示出來的啊!

        沒錯,在默認的情況下,當前所處的路徑信息,是直接顯示出來的,如下:

        root@ubuntu:~/OpenSource/linux-4.15/samples/watchdog$

        但是這里有一個小小的問題:如果終端窗口的大小并不是全屏的,如果目錄層次比較深,那么顯示的路徑信息就會特別的長,這樣的話,本來就不太寬的終端窗口就顯得很擠,輸入命令的時候很可能要折返到下一行去。

        于是,我就喜歡把這個顯示的路徑給它縮短:只顯示最后一個文件目錄,如下:

        root@ubuntu:watchdog$

        也就是把前面的 ~/OpenSource/linux-4.15/samples 路徑信息都丟掉,這樣的話,終端窗口中就有足夠的空間來輸入了。

        如果某個時候,我想看一下當前目錄的全路徑,那么就執行一下 pwd 這個指令就可以了。

        這就是我為什么經常使用 pwd 命令的原因。

        那么,應該怎么樣來去掉顯示路徑中的目錄信息呢?

        還是修改家目錄下的 .bashrc 文件:

        if [ "$color_prompt" = yes ]; then
           PS1='${debian_chroot:+($debian_chroot)}[]u@h[]:[]w[]$ '
        else
           PS1='${debian_chroot:+($debian_chroot)}u@h:w$ '
        fi

        找到上面這幾行內容,把最后面的 w 修改成 W 即可,也就是小寫的 w 改成大寫的 W。

        如果你正在測試,請不要忘記使用 source .bashrc 或者 . .bashrc 命令來重新加載哦!

        No.4 find

        find 命令用來查找符合指定條件的文件。

        我最常用的場景就是:查找指定名稱或類型的文件了。

        特別是在寫 Makefile 的時候,經常遇到找不到頭文件的錯誤,于是就可以這樣查找:

        find ./ -name xxx.h

        或者按照后綴名來查找文件:

        find ./ -name *.txt

        No.5 history

        history 用來記錄執行過的命令,如果您很少使用這條命令,那說明您的記憶力很好!

        但是對于我這樣忘性比較好的人來說,history 命令簡直太有用了!

        我在命令行窗口中測試某段代碼,經常需要反復的做這樣的排錯過程:修改代碼-編譯-執行-查看結果。

        如果編譯指令比較長,我相信沒有誰樂意一個字符一個字符的敲鍵盤,大部分是使用 history 列出最近使用的命令,然后復制、粘貼一下。

        查看歷史命令的時候,由于輸出太多,可以結合 grep 指令,只顯示我們感興趣的命令記錄,例如:

        history | grep gcc

        那么,結果中將只會顯示帶有 gcc 字眼的那些命令。

        另外,還有一個小技巧:在不查看 history 的情況下,快速的輸入之前執行過的某條指令(有一個前提條件:你必須能記住那條指令中剛開始的幾個字符)。

        比如,之前已經執行過這條指令:

        gcc -m32 -Wl,--export-dynamic -o main main.c -ldl

        幾分鐘之后,我想再次執行這條命令,可以這么做:

        同時按下 control 和 r 這兩個按鍵,此時輸入光標處就會變成這樣:

        root@ubuntu:tmp$
        (reverse-i-search)`':

        這時,可以輸入命令最前面的幾個字母:gcc -m,此時終端就會到歷史命令記錄中去查找,輸入的字符越多,匹配就越精確。

        如果輸入的字符,精準的匹配到了某個歷史命令記錄,它就立刻把這條命令完整的顯示出來。

        這個小技巧真的很好用,推薦您試一下!

        No.6 od

        od 命令用來輸出給定文件的內容。

        輸入文件內容的指令有很多了:cat、head、tail等等。但是 od 命令主要用來查看文件的二進制編碼,顯示的時候可以以指定的進制進行顯示。

        在之前的一篇拆解 ELF 格式的文章中:《Linux系統中編譯、鏈接的基石-ELF文件:扒開它的層層外衣,從字節碼的粒度來探索》,我就大量的使用了 od 指令,在一個 ELF 格式的文件中,從任意地址開始、讀取任意長度的字節碼。

        例如下面這條指令:讀取 main 文件中最開始的 52 個字節的內容:

        od -Ax -t x1 -N 52 main

        main 是 Linux 系統中的可執行程序,當然也就是 ELF 格式了。

        od 指令中使用到了下面這幾個選項:

        -Ax: 顯示地址的時候,用十六進制來表示。如果使用 -Ad,意思就是用十進制來顯示地址;

        -t -x1: 顯示字節碼內容的時候,使用十六進制(x),每次顯示一個字節(1);

        -N 52:只需要讀取 52 個字節;

        可以看出 main 文件最開始的四個字節:7f 是 ELF 文件的魔數,45 4c 46 是 "ELF" 3個字母。

        因此,使用 od 命令來分析二進制文件的內容,還是很有威力的!

        No.7 for

        for 這個命令,常常出現在腳本文件中,用來處理循環的情況,比如:遍歷文件、計數,例如:

        #!/bin/bash  
        for file in /tmp;  
        do  
        echo $file;  
        done

        我在使用 for 的時候,最常用的場景是給很多相同后綴的文件,按順序進行重命名:

        i=0;for x in *.mp4; do n=$(printf "%02d" "$i"); mv $x $n.mp4; let i=i+1; done

        這里是按照純數字來重命名的,也可以根據需要加上前綴等字符串。

        這里還有一個小問題需要注意一下:如果文件名中存在空格,mv 指令就會提示錯誤:

        mv: target 'xxx' is not a directory

        解決方法是:在終端窗口中,先執行一下這個命令:

        IFS='

        然后,再執行批量重命名命令,就不會出現錯誤了!

        當然,更好的方式是,把這幾個命令寫成一個腳本文件,實現對任意類型的文件進行批量重命名功能,然后放在自己的私有 bin 目錄下,隨取隨用。

        別擔心,我已經幫你寫好了,如下所示(file_rename.sh):

        #!/bin/bash
        if [ $# -eq 0 ];then
        sufix=mp4
        else
        sufix=$1
        fi
        IFS='

        i=0;for x in *.$sufix; do n=$(printf "%02d" "$i"); mv $x $n.$sufix; let i=i+1; done

        只要執行 ./file_rename.sh,就會默認把當前目錄下所有 mp4 文件進行重命名。

        如果是其他類型的文件,那就傳遞一個參數進去。

        比如:如果要批量對 png 格式的圖片進行重命名,那就執行 ./file_rename.sh png,最后的 png 是傳入的參數,對應于腳本文件中的 $1 變量。

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 男人天堂一区二区| 亚洲精品成人网| 亚洲国产VA| 岑巩县| 无码人妻中文字幕| 无码黑人| 中文字幕日韩有码| 国产九九在线视频| 亚洲91页| 英吉沙县| 两个人的免费视频| 四平市| 久久精品视频18| 观塘区| 久久精品视频18| 蜜桃视频在线入口www| 婷婷久久五月天| 少妇无码| 西昌市| 色中色AV| 天堂无码| 91乱子伦国产乱子伦www.sz-sd.cn| 超碰免费在线观看| 97香蕉碰碰人妻国产欧美| 久久激情综合| 无码偷拍| 亚洲精品XXX| 性欧美成人18| 日韩毛片在线免费观看| 国产老熟女伦老熟妇露脸| 合江县| 久艹AV| 亚洲国产精品羞羞| 亚洲区视频| 欧美色涩| 国模在线视频| jizz国产| 崇义县| 91视频在线观看免费| 国产主播第一页| 69精品|