cat和tac命令顯示文字檔案的內容,但它們的內容遠不止這些。再深入一點,學習一些高效的Linux命令列技巧。
這是兩個簡單的小命令,通常被認為過於簡單而沒有任何實際用途。但是,一旦您知道了使用它們的不同方法,您就會發現它們完全有能力在處理檔案時承擔起相應的重擔。
cat用於檢查文字檔案的內容,並將部分檔案連線在一起形成一個更大的檔案。
在撥號調變解調器時代的某個時候,二進位制檔案常常被分解成幾個較小的檔案,以便於下載。你沒有下載一個大檔案,而是把每個小檔案都拉回來。如果某個檔案未能正確下載,您只需再次檢索該檔案。
當然,您還需要一種方法將較小檔案的集合重新組織回單個工作二進位制檔案中。這個過程被稱為連線。這就是貓的由來,也是它的名字來源。
寬頻和光纖連線導致了這種特殊需求的減弱,就像撥號上網發出的刺耳聲音一樣,那麼,如今cat還能做些什麼呢?實際上很多。
要讓cat在終端視窗中列出文字檔案的內容,請使用以下命令。
確保該檔案是文字檔案。如果您試圖在終端視窗中列出二進位制檔案的內容,結果將是不可預測的。可能會導致終端會話被鎖定或更糟。
cat poem1.txt檔案poem1.txt的內容顯示在終端視窗中。
那只是那首著名詩的一半。剩下的呢?這裡還有一個叫做poem2.txt的檔案。我們可以用一個命令讓cat列出多個檔案的內容。我們只需要在命令列中按順序列出檔案。
cat poem1.txt poem2.txt看起來好多了,我們現在有整首詩了。
這首詩全在那兒,但它飛過窗戶太快了,讀不懂開頭的幾節。我們可以將cat的輸出匯入less,然後按自己的速度向下滾動文字。
cat poem1.txt poem2.txt | less我們現在可以在一個流中的文字中前後移動,即使它儲存在兩個單獨的文字檔案中。
我們可以對檔案中顯示的行進行cat編號。為此,我們使用-n(number)選項。
cat -n poem1.txt行在終端視窗中顯示時進行編號。
我們設法讓貓編號,但是歌詞之間的空格也在數。要使文字行編號但忽略空白行,請使用-b(數字非空白)選項。
cat -b poem1.txt現在文字行被編號,空白行被跳過。
如果檔案中有連續的空行部分,我們可以要求cat忽略除一個空行以外的所有空行。看看這個檔案。
下一個命令將使cat在每一組空行中只顯示一個空行。我們需要實現這一點的選項是-s(擠壓空白)選項。
cat -s poem1.txt這不會以任何方式影響檔案的內容;它只是更改cat顯示檔案的方式。
如果您想知道空格是由空格還是製表符引起的,可以使用-T(showtabs)選項來查詢。
cat -T poem1.txt選項卡由字元“^I”表示。
您可以使用-E(show ends)選項檢查尾隨空格。
cat -E poem1.txt行尾由“$”字元表示。
把一首詩儲存在兩個檔案中,每個檔案中有一半是沒有意義的。讓我們把他們連在一起,把整首詩放在一個新的檔案裡。
cat poem1.txt poem2.txt > jabberwocky.txt讓我們使用cat檢查新檔案:
cat jabberwocky.txt我們的新檔案包含其他兩個檔案的內容。
那更好,但事實上,這不是整首詩。最後一節不見了。Jabberwocky的最後一節與第一節相同。
如果我們有一個檔案中的第一節,我們可以把它新增到檔案的底部jabberwocky.txt檔案檔案,我們就有完整的詩。
在下一個命令中,我們必須使用>;,而不僅僅是>;。如果使用單個>;將覆蓋jabberwocky.txt檔案. 我們不想那樣做。我們想在它的底部新增文字。
cat first_verse.txt >> jabberwocky.txt讓我們檢查一下這本書的內容jabberwocky.txt檔案檔案:
cat jabberwocky.txt最後,這首詩的所有部分都在一起了。
您可以使用cat將鍵盤輸入重定向到檔案中。您鍵入的所有內容都將重定向到檔案中,直到您按Ctrl+D。請注意,我們使用單個>;,因為我們要建立該檔案(或覆蓋它,如果它存在的話)。
cat > my_poem.txt我們一發出命令就可以開始打字了。完成後按Ctrl+D。然後,我們可以透過以下方式檢查新檔案的內容:
cat my-poem.txt聽起來像是一個遙遠的渦輪可能是劉易斯卡羅爾在他的墳墓裡高速旋轉。
tac與cat類似,但它以相反的順序列出檔案的內容。
讓我們看看:
tac my_poem.txt檔案以相反的順序列在終端視窗中。在這種情況下,它對它的文學價值沒有影響。
使用沒有檔名的tac會導致它對鍵盤的輸入進行操作。按Ctrl+D將停止輸入階段,tac將以相反的順序列出您鍵入的內容。
tac當按下Ctrl+D時,輸入將反轉並列在終端視窗中。
除了低階的客廳把戲,tac還能做什麼有用的事嗎?是的,可以。許多日誌檔案將其最新條目附加在檔案的底部。使用tac(與直覺相反,還有head),我們可以將最後一個條目彈出到終端視窗中。
我們使用tac反向列出syslog檔案,並將其匯入head。透過告訴head只打印它接收到的第一行(由於tac是檔案中的最後一行),我們可以看到syslog檔案中的最新條目。
tac /var/log/syslog | head -1head列印syslog檔案中的最新條目,然後退出。
注意,頭部只打印一行,因為我們的要求,但行是如此之長,它繞了兩圈。這就是為什麼它看起來像終端視窗中的三行輸出。
tac的最後一個招數是一個美人。
通常,tac對文字檔案的操作方式是從下到上逐行遍歷它們。行是以換行符結尾的字元序列。但我們可以告訴tac使用其他分隔符。這允許我們將文字檔案中的“塊”資料視為資料記錄。
假設我們有一個需要檢查或分析的程式日誌檔案。讓我們看一下它的格式。
less logfile.dat如我們所見,檔案有一個重複的格式。有三行十六進位制值的序列。每組三行十六進位制都有一個標籤行,以“=SEQ”開頭,後跟一個數字序列。
如果我們滾動到檔案的底部,我們可以看到有很多這樣的記錄。最後一個號碼是865。
讓我們假設,無論出於什麼原因,我們都需要以相反的順序處理這個檔案,一個數據記錄一個數據記錄。必須保留每個資料記錄中三個十六進位制行的行順序。
我們要注意的是,檔案中的最後三行以十六進位制值93、E7和B8開始,按順序排列。
讓我們用tac反轉檔案。這是一個很長的檔案,所以我們將用管道把它壓縮成更少的檔案。
tac logfile.dat | less這會反轉檔案,但不是我們想要的結果。我們希望反轉檔案,但每個資料記錄中的行必須按其原始順序。
我們之前記錄過,檔案中的最後三行以十六進位制值93、E7和B8開始,按順序排列。這些行的順序顛倒了。另外,“=SEQ”行現在位於每組三個十六進位制行的下方。
塔克去營救。
tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | less我們把它分解一下。
-s(分隔符)選項通知tac我們要在記錄之間使用什麼作為分隔符。它告訴tac不要使用通常的換行符,而是使用分隔符。
r(regex)選項告訴tac將分隔符字串視為正則表示式。
-b(before)選項使tac將分隔符列在每條記錄之前而不是之後(這是預設分隔符換行符的通常位置)。
-s(分隔符)字串^=SEQ.+[0-9]+*$被破譯如下:
^字元表示行的開始。後跟=序號+[0-9]+*$。這指示tac在行首查詢“=SEQ.”的每一次出現,後跟任意數字序列(由[0-9]表示),後跟任意其他字符集(由*$表示)。
像往常一樣,我們把所有的東西都用管道輸送到更少的地方。
我們的檔案現在以相反的順序顯示,每個“=SEQ”標籤行列在它的三行十六進位制資料之前。三行十六進位制值在每個資料記錄中按其原始順序排列。
我們可以簡單地檢查一下。十六進位制的前三行的第一個值(即檔案反轉前的最後三行)與我們之前記錄的值相匹配:93、E7和B8。
這是一個相當的技巧為終端視窗一行。
在Linux世界中,即使是看似最簡單的命令和實用程式也可能具有令人驚訝和強大的屬性。
簡單實用程式的設計理念可以很好地完成一件事,並且可以很容易地與其他實用程式互動,這就產生了一些奇怪的小命令,比如tac。乍一看,似乎有點怪。但是,當你窺視表面之下,有一種意想不到的力量,你可以利用你的優勢。
或者,正如另一種哲學所說,“不要因為蛇沒有角而輕視它,因為誰能說它不會變成龍呢?”?”
... 今天我們將介紹如何在Windows、Mac和Linux上將命令的輸出傳送到bashshell中的文字檔案。 ...
... 我們不希望您在不知道命令列如何工作的情況下就開始使用它。本質上,它是一種指示計算機執行任務的方法,但沒有滑鼠。 ...
Linux中有幾種不同的應用程式和命令可以為您建立新檔案,即使不啟動應用程式。使用哪種方法取決於檔案的用途。讓我們看看這些選項,這樣您就可以知道哪一個對您最有用。 ...
...版本可以讓您對安全更新做出重要決定。我們將向您展示如何找到這些,無論您使用哪個發行版。 滾動和點釋放 你知道你在執行哪個版本的Linux嗎?你能找到核心版本嗎?Linux的滾動發行版,如Arch、Manjaro和openSUSE,經常使用自...
...取文字。它快速、準確,可以使用大約100種語言。下面是如何使用它。 光學字元識別 光學字元識別(OCR)是一種在影象中觀察和查詢單詞,然後將其提取為可編輯文字的能力。對於人類來說,這項簡單的任務對於計算機來說...
Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...
...命令列使用它來操作檔案和流中的文字。我們將向你展示如何利用它的力量。 sed的力量 sed命令有點像國際象棋:學習基礎知識需要一個小時,掌握它們需要一輩子(或者,至少需要大量的練習)。我們將向您展示sed功能的每...