每天一個linux命令:cat

每天一個linux命令:cat

cat 命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。

更多精彩請查看:www.zicreate.com

1.命令功能

cat主要有三大功能:

  • a. 顯示整個文件:cat filename
  • b. 從標準輸入 stdin 創建一個文件:cat > filename 只能創建新文件,不能編輯已有文件。
  • c. 將幾個文件合併爲一個文件:cat file1 file2 > file

2.命令格式

cat [選項] [文件]…

3.命令參數

    -A, --show-all           等價於 -vET
    -b, --number-nonblank    對非空輸出行編號
    -e                       等價於 -vE
    -E, --show-ends          在每行結束處顯示 $
    -n, --number             對輸出的所有行編號,由1開始對所有輸出的行數編號
    -s, --squeeze-blank      有連續兩行以上的空白行,就代換爲一行的空白行 
    -t                       與 -vT 等價
    -T, --show-tabs          將跳格字符顯示爲 ^I
    -u                       (被忽略)
    -v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFDTAB 之外

4.使用場景

場景1:讀取文件內容

命令:

$ cat -n zicreate.txt
1    剛上初中的時候,有一天晚自習,同桌突然對我說道:下課後我咱倆去後操場看搞對象的去吧。
2
3    我:不去,人家都是初二初三的。萬一靠太近,把咱倆打一頓怎麼辦?
4
5    同桌:放心吧,咱倆也拉着手裝情侶,黑燈瞎火的,他們看不出來。
6
7    結果當晚我倆趕上了全校嚴打,抓住了不少早戀學生,第二天還全校通告批評,其中女生13人,男生15人。
8
9    作者:阿勒藏
10    鏈接:https://www.zhihu.com/question/65389861/answer/274473109
11    來源:知乎
12    著作權歸作者所有,轉載請聯繫作者獲得授權。
13

場景2:查看文件內是否有window格式符

在window下編輯的文件copy到 Linux 下使用時,有事會遇到莫名奇妙的錯誤,如下:

$ ./window_edit.sh

-bash: ./window_edit.sh: /bin/bash^M: bad interpreter: No such file or directory

cat 輸出顯示文件中不可顯格式符的方式如下:

$ cat -e window_edit.sh
#!/bin/bash^M$
^M$
echo "I'm from windows."^M$
^M$

上面的“^M$”就是不可見的特殊字符,“^M” 是windows下的換行符,在Linux下會出現識別錯誤,要解決這個問題至少可以通過 vim/sed/dos2unix 這三種方案進行處理。處理方案如下:

1. $ dos2unix window_edit.sh
2. 使用 vim/vi 的替換功能。
    :%s/^M//g              # 去掉所有的^M。
3. $ sed -e 's/^M/\n/g' window_edit.sh

注意:這裏的“^M”要使用“CTRL-V CTRL-M”生成,而不是直接鍵入“^M”。 

場景3:多文件合併輸出

命令:

$ cat -b joke.txt onlyOne.txt
1  一個本科男找了一個女博士。 
2  情人節,本科男給女博士發了一個520元的紅包,附言:我愛你。 
3  稍後,女博士給本科男發了一個5.20元的紅包,並附言:我愛你多一點!
4  I have only one line

上面的示例視乎太簡單了,下面講一個實際應用的場景,在很久很久以前,我們的一個產品需要實現一個OTA功能,目標是將一個3M左右的文件通過GPRS下載到遠程終端,由於GPRS穩定性較差,所以必須實現一個高效且節省流量的斷點續傳功能。實現原理簡略如下:

tar -czvf - bin/ | split -b 30k      #將 bin 目錄打包壓縮並分割爲30kb大小的分片
ls xa* | xargs -i mv {} {}.bin       #將分片批量重命名爲 .bin 爲後綴的文件
cat *.bin > OTA.tar.gz               #將分片重新合併爲壓縮包

通過上面的方法,將一個大文件分割爲多個小的切片,傳輸時按照分片進行傳輸,如果一個分片出現錯誤只需要傳輸當前分片,通過以上方法極大的提高了文件傳輸效率,實際效果很好。

場景4:直接編輯生成文件

命令:

$ cat > test.txt <<END
>在學校裏面打水排隊的時候,旁邊估計一對小情侶,膩膩歪歪的。
>女生對男生說,我想當國家主席。
>男生沒說話
>女生看男生沒反應,就生氣的錘了他一下,說咋了,我想當國家主席,你咋不幫幫我
>男生這時候一臉無辜的憋了一句出來
>那我只能投你一票了。
>END

上文中的”END”爲分界符,也可以是其他隨便什麼字符串,當輸入第二個分界符實現閉合時,分界符之間的內容會自動寫入指定的文件中。

在Linux的世界中,“>” 表示覆蓋寫入,“>>” 表示追加,所以,通過 cat 向文件中追加內容時,命令如下:

$ cat >> test.txt << END
> 我是追加的.
>END 

擴展

cat 命令有一個好兄弟tac,tac就是將 cat 反寫過來,所以他的功能就跟 cat 相反(僅指輸出功能), cat 是從第一行到最後一行輸出,而 tac 則是由最後一行到第一行反向輸出!

命令:

$ tac test.txt
我是追加的.
那我只能投你一票了。
男生這時候一臉無辜的憋了一句出來
女生看男生沒反應,就生氣的錘了他一下,說咋了,我想當國家主席,你咋不幫幫我
男生沒說話
女生對男生說,我想當國家主席。
在學校裏面打水排隊的時候,旁邊估計一對小情侶,膩膩歪歪的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章