歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> cut - Linux下小巧的文本截取工具

cut - Linux下小巧的文本截取工具

日期:2017/2/28 14:36:34   编辑:Linux教程

簡介

cut命令是Unix下的一個命令行程序。cut命令是以為單位來處理的。cut命令處理的是標准輸入,所以可以結合管道來進行文本的處理。

命令格式

cut option… [file]…

cut命令的option部分可以是如下的一些選項:

-b, --bytes=LIST 選擇指定數目LIST的字節

-c, --characters=LIST 選擇指定數目LIST的字符

-d, --delimiter=DELIM 使用DELIM作為內容的分隔符,而不是使用默認的制表符(tab)作為分隔符

-f, --fields=LIST 選擇LIST指定的LIST部分內容,輸出選中的內容,並且如果字符沒有包含分隔符,則也同樣輸出,除非指定了-s選項

-n 和-b一起使用,表示在選擇字節的時候,對於多字節的字符不進行分隔,多字節的字符被看作一個字節

-s, --only-delimited 不輸出不包含分隔符的行

--output-delimiter=STRING 使用STRING作為輸出內容中的分隔符,而不是使用原來標准輸入中的分隔符。

Note:對於選項-b, -c, -f,只能在一個命令被指定其中的一項。

命令結果的輸出的順序和待處理數據在輸入時的順序是一樣的。

對於一個LIST,可以是一個范圍,也可以是多個由逗號分隔的多個范圍。

LIST的格式:

N 表示指定N個數據單元,計數從1開始

N- 從第N個數據單元開始到行結束

N-M 從第N個數據單元到第M個數據單元(包括)

-M 從行的開始到底M個數據單元(包括)

其中的數據單元可以是:字節,字符,數據塊

Note:如果命令中沒有指定FILE或者FILE是"-",則默認是讀取標准輸入。

用法

在Linux下環境變量PATH中包含了由”:”分隔的變量的查找路徑,假設我們需要截取其中的其中的第二個路徑,則可以使用如下的方法:

echo $PATH | cut -d ':' -f 2

如果需要截取PATH變量中從第二個路徑開始到結束的所有內容,可以使用如下的方法:

echo $PATH | cut -d ':' -f 2-

如果需要截取內容從開始到第3部分的內容,則可以使用如下的命令:

echo $PATH | cut -d ‘:’ -f –3

如果是截取從第2部分到第3部分的內容,則可以使用如下的命令:

echo $PATH | cut -d ':' 2-3

如果碰到一樣是不包含任何分隔符的,那麼實際上這一樣我們可能不需要任何處理,cut默認是會原樣輸出的,如果你不需要它們輸出,

則可以使用選項’-s’來阻止那些不包含指定分隔符的行:

echo $PATH | cut -s -d ':' -f 3

上述的-d選項可以用於有明顯的分隔符存在的情況下使用,在格式明顯的文本行處理中可以方便的對行進行截取。除了利用分隔符來截取分隔文本,對於沒有分隔格式的字符文本還可以進行指定字符個數的截取,那就是-c選項了:

取出一行文本中的第3個字節:

echo 'hello' | cut -c 3

同樣的,如果需要輸出指定范圍內的字符,則可以使用n-m的方式指定范圍

echo 'hello' | cut -c -2    #輸出行開始到第2個字符的內容
echo 'hello' | cut -c 2-3   #輸出第2到3個字符
echo 'hello' | cut -c 2-    #輸出從第二字符開始到行結束的內容

在輸出的時候,如果需要指定一種另外的分隔符來分隔輸出的內容,以替代原來的分隔符,則可以使用--output-delimiter來處理

echo $PATH | cut -d ':' -f 1- --output-delimiter='*'

則輸出的PATH變量就是以*作為分隔符,而不是使用:來作為分隔符,是不是很方便?

當cut遇上Vim

想象一下,如果cut命令和Vim配合使用,是不是可以完成很多霸氣的操作呢,嘻嘻!且看:

假設我在Vim中正在編輯這樣的文本:

我想把分隔數字的*改成冒號:,怎麼辦呢?一個一個改?,你或許會想到在Vim下的模式替換來處理,這確實是一個好方法。如果Vim結合cut命令來處理,也可以達到異曲同工的效果:

使用Vim下的模式替換命令:

Shift+V      #選中當前的行
:s/\*/:/g    #使用s命令進行替換,由於*在Vim中是由特殊含義的,需要使用反斜槓來轉義

使用cut命令來處理:

Shift+V      #選中光標所在的行
:!cut -d '*' -f 1- --output-delimiter=':'

兩個命令的執行結果都一樣,變成這樣了:

所以,cut命令配合Vim,也可以是一種有效的文本編輯的方法。這不也是Unix下的KISS模式的一種體現嗎?

Copyright © Linux教程網 All Rights Reserved