如何使用Linux cat和tac命令

Linux桌面上的終端窗口的藝術Fatmawati Achmad Zaenuri / Shutterstock.com

TAC 命令顯示文本文件的內容,但它們不僅僅滿足於眼睛。潛水更深一點,學習一些高效的Linux命令行技巧。

這是兩個簡單的小命令,通常被認為只是 – 太簡單,沒有任何實際用途。但是一旦你知道了使用它們的不同方法,你會發現它們完全有能力在處理文件時公平分擔繁重的工作。

貓命令

用於檢查文本文件的內容,並將文件的各個部分連接在一起以形成更大的文件。

在撥號調製解調器時代的一個時代 – 二進制文件經常被分成幾個較小的文件,以便於下載。您沒有下載一個大文件,而是撤回了每個較小的文件。如果單個文件無法正確下載,您只需再次檢索該文件。

當然,您需要一種方法將較小文件的集合重新構建回單個工作二進制文件中。這個過程叫做連接。那就是那裡 進來,它的名字從哪裡來。

寬帶和光纖連接引起了特別需要消退 – 就像尖銳的撥號聲音 – 所以剩下的就是 今天要做什麼?實際上相當多。

顯示文本文件

具有 列出文本文件的內容到終端窗口,使用以下命令。

確保該文件是文本文件。如果您嘗試將二進制文件的內容列出到終端窗口,則結果將是不可預測的。您最終可能會遇到鎖定的終端會話或更糟糕的情況。

cat poem1.txt

cat poem1.txt在終端窗口中

文件poem1.txt的內容顯示在終端窗口中。

終端窗口中poem1.txt的內容

這只是這首着名詩歌的一半。其餘部分在哪裡?這裡有另一個名為poem2.txt的文件。我們可以做 使用一個命令列出多個文件的內容。我們需要做的就是在命令行上按順序列出文件。

cat poem1.txt poem2.txt

cat poem1.txt poem2.txt在終端窗口中

那看起來更好;我們現在有整首詩。

終端窗口中的poem1.txt和poem2.txt的內容

用較少的貓

這首詩就在那裡,但它太過快速地射過窗戶,無法閱讀前幾節經文。我們可以管道輸出 然後按照我們自己的節奏向下滾動文本。

cat poem1.txt poem2.txt |減

cat poem1.txt poem2.txt |少在終端窗口

我們現在可以在一個流中向前和向後移動文本,即使它保存在兩個單獨的文本文件中。

終端窗口中poem1.txt和poem2.txt的內容較少

編號文件中的行

我們可以將cat編號顯示在文件中。為此,我們使用 -n (數字)選項。

cat -n poem1.txt

cat -n poem1.txt在終端窗口中

這些行在終端窗口中顯示為編號。

poem1.txt的內容,在終端窗口中帶有編號行

不要編號空行

我們設法將行編號為 ,但這些經文之間的空白行也在計算中。要使文本行編號但忽略空行,請使用 -b (number-nonblank)選項。

cat -b poem1.txt

cat -b poem1.txt在終端窗口中

現在文本行被編號,並且跳過空白行。

跳過空白l的編號線;終端窗口中的ines

不要顯示多個空行

如果文件中有連續的空行部分,我們可以詢問 忽略除一條空白行以外的所有行。看看這個文件。

終端窗口中帶有連續空行的文件的內容

下一個命令將導致 從每組空行中只顯示一個空行。我們需要實現這一目標的選擇是 -s (擠壓)選項。

cat -s poem1.txt

cat -b poem1.txt在終端窗口中

這不會以任何方式影響文件的內容;它只是改變了方式 顯示文件。

在終端窗口中忽略多個空行

顯示標籤

如果你想知道空格是由空格還是標籤引起的,你可以找到使用 -T (show-tabs)選項。

cat -T poem1.txt

cat -T poem1.txt在終端寡婦身上

選項卡由字符“^ I”表示。

內容ofpoem1.txt,終端窗口中顯示選項卡

顯示線的末端

您可以使用以下命令檢查尾隨空格 -E (show-ends)選項。

cat -E poem1.txt

cat -T poem1.txt在終端窗口中

行的末尾由“$”字符表示。

poem1.txt的內容,在終端窗口中顯示行尾

連接文件

將一首詩保存在兩個文件中是沒有意義的,每個文件各有一半。讓我們將它們連接在一起,並在其中創建一個包含整首詩的新文件。

cat poem1.txt poem2.txt> jabberwocky.txt

cat poem1.txt poem2.txt> jabberwocky.txt在終端窗口中

讓我們用 檢查我們的新文件:

貓jabberwocky.txt

在終端窗口中的cat jabberwocky.txt

我們的新文件包含其他兩個文件的內容。

終端窗口中jabberwocky.tx的內容

將文本附加到現有文件

那更好,但事實上,這不是整首詩。最後一節缺失了。 Jabberwocky的最後一節與第一節相同。

如果我們在文件中有第一節,我們可以將它添加到jabberwocky.txt文件的底部,我們將有完整的詩。

在下一個命令中,我們必須使用 >>, 不只是 >。如果我們使用單一 > 我們將覆蓋jabberwocky.txt。我們不想這樣做。我們希望將文本附加到其底部。

cat first_verse.txt >> jabberwocky.txt

cat first_verse.txt >>終端窗口中的jabberwocky.txt

讓我們檢查一下jabberwocky.txt文件的內容:

貓jabberwocky.txt

在終端窗口中的cat jabberwocky.txt

最後,這首詩的所有部分都在一起。

終端窗口中jabberwocky.txt的內容

重定向標準輸入

您可以使用鍵盤將鍵盤輸入重定向到文件中 。您輸入的所有內容都會重定向到文件中,直到您按Ctrl + D.請注意,我們使用單一 > 因為我們想要創建文件(或覆蓋它,如果它存在)。

cat> my_poem.txt

cat> my_poem.txt在終端窗口中

我們可以在發出命令後立即開始輸入。我們完成後按Ctrl + D.然後我們可以檢查新文件的內容:

cat my-poem.txt

低檔的順口溜在終端窗口

聽起來像遙遠的渦輪機可能是劉易斯卡羅爾在他的墳墓中高速旋轉。

tac命令

TAC 類似於 ,但它以相反的順序列出文件的內容。

讓我們看看:

tac my_poem.txt

終端窗口中的tac my_poem.txt

並且文件以相反的順序列在終端窗口中。在這種情況下,它對其文學價值沒有影響。

my_poem.txt在終端窗口中以相反的順序列出

使用tac與stdin

運用 TAC 沒有文件名將導致它對鍵盤的輸入進行操作。按Ctrl + D將停止輸入階段,無論你輸入什麼,tac都會以相反的順序列出。

TAC

tac在終端窗口中使用stdin

當按下Ctrl + D時,輸入被反轉並列在終端窗口中。

在終端窗口中使用stdin從tac輸出

使用tac與日誌文件

除了低檔的客廳技巧,可以 TAC 做有用的事嗎?是的,它可以。許多日誌文件將最新的條目附加到文件的底部。運用 TAC (並且違反直覺, )我們可以將最後一個條目彈出到終端窗口。

我們用 TAC 反向列出syslog文件,並將其傳入 。通過告訴 只打印它收到的第一行(感謝 TAC 是文件中的最後一行),我們在syslog文件中看到最新的條目。

tac / var / log / syslog |頭-1

tac / var / log / syslog |終端窗口中的頭-1

從syslog文件中打印最新條目,然後退出。

注意 只打印一行 – 正如我們要求的那樣 – 但這條線很長,它繞了兩圈。這就是它在終端窗口看起來像三行輸出的原因。

來自終端窗口中syslog的最後一個條目

將tac與文本記錄一起使用

最後一招 TAC 有它的袖子是一種美。

通常情況下, TAC 通過從下到上逐行處理文本文件來對文本文件進行操作。一行是由換行符終止的字符序列。但我們可以告訴你 TAC 與其他分隔符合作。這允許我們將文本文件中的“數據塊”視為數據記錄。

假設我們有一個我們需要查看或分析的程序的日誌文件。我們來看看它的格式

少logfile.dat

終端窗口中的日誌文件較少

我們可以看到,文件有一種重複的格式。存在三行十六進制值的序列。每組三行十六進制的標籤行以“= SEQ”開頭,後跟一系列數字。

終端窗口中日誌文件的頂部

如果我們滾動到文件的底部,我們可以看到有很多這些記錄。最後一個編號為865。

終端窗口中日誌文件的底部

讓我們假設無論出於何種原因我們需要以相反的順序處理這個文件,數據記錄的數據記錄。必須保留每個數據記錄中三個十六進制行的行順序。

我們將記下文件中的最後三行以十六進制值93,E7和B8的順序開始。

我們來使用吧 TAC 轉換文件。這是一個非常長的文件,所以我們將它輸入

tac logfile.dat |減

tac logfile.dat |少在終端窗口

這會反轉文件,但這不是我們想要的結果。我們希望文件被反轉,但每個數據記錄中的行必須按原始順序排列。

在終端窗口中反轉logfile

我們之前記錄過,文件中的最後三行按十六進制值93,E7和B8開始。這些線的順序已被顛倒過來。此外,“= SEQ”行現在低於每組三個十六進制行。

TAC 救援。

tac -b -r -s ^ = SEQ。+(0-9)+ * $ logfile.dat |減

tac -b -r -s ^ = SEQ。+(0-9)+ * $ logfile.dat |少在終端窗口

讓我們打破它。

-s (分隔符)選項通知 TAC 我們想要用作記錄之間的分隔符。它說 TAC 不要使用通常的換行符,而是使用我們的分隔符。

-r (正則表達式)選項告訴 TAC 將分隔符字符串視為正則表達式。

-b (之前)選項原因 TAC 在每個記錄之前而不是在它之後列出分隔符(這是它的默認分隔符的常用位置,換行符)。

-s (分隔符)字符串 ^ = SEQ。+(0-9)+ * $ 被破譯如下:

^ character表示該行的開頭。接下來是 = SEQ。+(0-9)+ * $。這指示 TAC 在一行的開頭查找“= SEQ。”的每次出現,然後是任何數字序列(由…表示) (0-9)),然後是任何其他字符集(由…表示) * $)。

我們正在把所有的東西都用完 , 照常。

使用正確形成的數據記錄反轉日誌文件

我們的文件現在以相反的順序呈現,每個“= SEQ”標籤行在其三行十六進制數據之前列出。三行十六進制值在每個數據記錄中按原始順序排列。

我們可以簡單地檢查一下。前三行十六進制的第一個值(它是文件被反轉之前的最後三行)與我們之前記錄的值匹配:93,E7和B8,按此順序排列。

對於終端窗口單線程來說,這是一個很好的技巧。

一切都有目的

在Linux世界中,即使看似最簡單的命令和實用程序也可以具有令人驚訝和強大的屬性。

簡單實用程序的設計理念,它做得很好,並且很容易與其他實用程序交互,產生了一些奇怪的小命令,例如 TAC。乍一看,這看起來有點奇怪。但是當你在表面下看時,有一種意想不到的力量可以利用你的優勢。

或者,正如另一種哲學所說,“不要因為沒有角而鄙視蛇,因為誰能說它不會變成龍?”

body #primary .entry-content ul#nextuplist list-style-type:none; margin-left:0px; padding-left:0px;
body #primary .entry-content ul#nextuplist li a text-decoration:none; color:#1d55a9;

請閱讀下一步

  • > Steam不支持Ubuntu 19.10和未來版本
  • >怎樣使您的啞窗空調智能化
  • >微軟的新Windows終端現已推出
  • >怎樣在Google地圖上報告虛假商家信息
  • >盜版怎樣使法律流媒體服務更好
本文機器自動生成,不保證語句完整通順和表達準確,亦不對內容真實有效性負責,請讀者知悉。