Linux 常用指令大全 - 文件內容操作
cat
顯示文件內容
語法:
cat [選項] [文件...]
選項:
-b # 顯示非空行的行號,從1開始
-e # 顯示不可見字符,並在每行結尾顯示美元符號($)
-n # 顯示所有行的行號,從1開始
-s # 壓縮連續的空行,使輸出變為單行間隔
-t # 顯示不可見字符,並將製表符顯示為‘^I’
-v # 顯示不可見字符,控制字符顯示為‘^X’,非ASCII字符顯示為‘M-’後跟低7位字符
範例:
cat file.txt # 顯示file.txt的內容
cat -n file.txt # 顯示file.txt的內容並顯示行號
cat file1.txt file2.txt > merged.txt # 合併file1.txt和file2.txt的內容並保存到merged.txt
cat -b file.txt # 顯示file.txt的內容並顯示非空行的行號
cat -s file.txt # 顯示file.txt的內容並壓縮連續的空行
cat -e file.txt # 顯示file.txt的內容,並在每行結尾顯示美元符號($)
cat file1 - file2 - file3 # 依次顯示file1、標準輸入、file2、標準輸入和file3的內容
cat -v file.txt # 顯示file.txt的內容,並顯示不可見字符
less
分頁顯示文件內容
語法:
less [選項] [文件]
選項:
-bN # 設置緩衝區大小為N行
-e # 當到達文件末尾後自動退出
-f # 強制打開特殊文件,例如設備文件和二進制文件
-i # 搜索時忽略大小寫
-m # 顯示更詳細的百分比信息
-N # 顯示行號
-s # 壓縮連續的空行
-S # 禁用自動換行
-xN # 將Tab字元顯示為N個空格字元
範例:
less file.txt # 分頁顯示file.txt的內容
less -N file.txt # 分頁顯示file.txt的內容並顯示行號
less -S file.txt # 分頁顯示file.txt的內容,禁用自動換行
less -i file.txt # 搜索時忽略大小寫
less +/pattern file.txt # 分頁顯示file.txt的內容並跳轉到匹配pattern的位置
less -m file.txt # 分頁顯示file.txt的內容並顯示更詳細的百分比信息
less -e file.txt # 分頁顯示file.txt的內容,到達文件末尾後自動退出
less -f /dev/sda # 強制打開設備文件/dev/sda
less -X file.txt # 禁用終端初始化和重置,分頁顯示file.txt的內容
more
分頁顯示文件內容
語法:
more [選項] [文件]
選項:
-d # 在文件結尾顯示一條消息並等待用戶輸入指令
-l # 忽略換頁符(Ctrl-L)
-f # 將長行視為多行
-c # 清屏而非滾屏顯示內容
-p # 使用清屏模式顯示文件(不滾動)
-s # 壓縮連續的空行
-u # 禁用下劃線顯示
-nN # 設置顯示的行數為N行
+N # 從第N行開始顯示文件
+/pattern # 搜索模式並從匹配行開始顯示
範例:
more file.txt # 分頁顯示file.txt的內容
more -d file.txt # 在文件結尾顯示消息並等待用戶輸入指令
more -f file.txt # 將長行視為多行顯示
more -c file.txt # 使用清屏模式顯示文件
more -p file.txt # 清屏模式顯示文件,不滾動
more -s file.txt # 壓縮連續的空行
more -n20 file.txt # 每次顯示20行內容
more +3 file.txt # 從file.txt的第3行開始顯示
more +/pattern file.txt # 搜索模式pattern並從匹配行開始顯示
head
顯示文件開頭部分
語法:
head [選項] [文件...]
選項:
-c, --bytes=[-]NUM # 顯示文件的前NUM字節;NUM前可加“-”表示從文件末尾開始算
-n, --lines=[-]NUM # 顯示文件的前NUM行;NUM前可加“-”表示從文件末尾開始算
-q, --quiet, --silent # 不顯示文件名(僅在多文件時有用)
-v, --verbose # 顯示文件名(僅在多文件時有用)
範例:
head file.txt # 顯示file.txt的前10行
head -n 5 file.txt # 顯示file.txt的前5行
head -c 20 file.txt # 顯示file.txt的前20個字節
head -n -5 file.txt # 顯示file.txt,除了最後5行
head -q file1.txt file2.txt # 顯示file1.txt和file2.txt的前10行,不顯示文件名
head -v file1.txt file2.txt # 顯示file1.txt和file2.txt的前10行,並顯示文件名
tail
顯示文件結尾部分
語法:
tail [選項] [文件...]
選項:
-c number, --bytes=number # 顯示文件的最後number個字節
-f # 持續顯示文件的新內容(文件增長時顯示新內容)
-F # 等同於-f,但會在文件被重命名或移動時重新打開文件
-n number, --lines=number # 顯示文件的最後number行
-q, --quiet, --silent # 不顯示多個文件的文件名
-v, --verbose # 顯示多個文件時,顯示文件名
範例:
tail file.txt # 顯示file.txt的最後10行
tail -n 20 file.txt # 顯示file.txt的最後20行
tail -c 50 file.txt # 顯示file.txt的最後50個字節
tail -f /var/log/syslog # 實時顯示/var/log/syslog的新增內容
tail -F /var/log/messages # 實時顯示/var/log/messages的新增內容,並在文件被重命名或移動時重新打開
tail -q file1.txt file2.txt # 顯示file1.txt和file2.txt的最後10行,不顯示文件名
tail -v file1.txt file2.txt # 顯示file1.txt和file2.txt的最後10行,並顯示文件名
grep
搜尋文件中的文字
語法:
grep [選項] PATTERN [文件...]
選項:
-E, --extended-regexp # 使用擴展正則表達式
-F, --fixed-strings # 使用固定字符串作為模式, 而不是正則表達式
-G, --basic-regexp # 使用基本正則表達式(默認)
-c, --count # 只顯示匹配的行數
-i, --ignore-case # 忽略大小寫
-v, --invert-match # 只顯示不匹配的行
-w, --word-regexp # 強制模式與單詞匹配
-x, --line-regexp # 強制模式與整行匹配
-n, --line-number # 顯示匹配行的行號
-r, --recursive # 遞歸搜索目錄中的文件
-l, --files-with-matches # 只顯示包含匹配的文件名
-L, --files-without-match # 只顯示不包含匹配的文件名
-m, --max-count=NUM # 在匹配到NUM個匹配後停止搜索
-o, --only-matching # 只顯示匹配的部分
-q, --quiet, --silent # 靜默模式,不顯示任何輸出
-A NUM, --after-context=NUM # 顯示匹配行後NUM行
-B NUM, --before-context=NUM # 顯示匹配行前NUM行
-C NUM, --context=NUM # 顯示匹配行前後各NUM行
範例:
grep "pattern" file.txt # 搜索file.txt中包含"pattern"的行
grep -i "pattern" file.txt # 搜索file.txt中包含"pattern"(忽略大小寫)的行
grep -v "pattern" file.txt # 搜索file.txt中不包含"pattern"的行
grep -r "pattern" /path/to/directory # 遞歸搜索目錄中包含"pattern"的文件
grep -n "pattern" file.txt # 搜索file.txt中包含"pattern"的行,並顯示行號
grep -l "pattern" /path/to/directory/* # 列出目錄中包含"pattern"的文件名
grep -c "pattern" file.txt # 顯示file.txt中包含"pattern"的行數
grep -A 3 "pattern" file.txt # 顯示file.txt中包含"pattern"的行及其後3行
grep -B 2 "pattern" file.txt # 顯示file.txt中包含"pattern"的行及其前2行
grep -C 2 "pattern" file.txt # 顯示file.txt中包含"pattern"的行及其前後各2行
grep -o "pattern" file.txt # 只顯示file.txt中匹配的部分
sed
流編輯器,用於文字替換和操作
語法:
sed [選項] '指令' [文件...]
sed [選項] -f scriptfile [文件...]
選項:
-e<script> 或 --expression=<script> # 以選項中的指定的script來處理輸入的文字檔
-f<script檔案> 或 --file=<script檔案> # 以選項中指定的script檔案來處理輸入的文字檔
-h 或 --help # 顯示幫助
-n 或 --quiet 或 --silent # 僅顯示script處理後的結果
-V 或 --version # 顯示版本資訊
命令:
a\ # 在當前行下面插入文字
i\ # 在當前行上面插入文字
c\ # 把選定的行改為新的文字
d # 刪除選擇的行
D # 刪除範本塊的第一行
s # 替換指定字元
h # 複製範本塊的內容到記憶體中的緩衝區
H # 追加範本塊的內容到記憶體中的緩衝區
g # 獲得記憶體緩衝區的內容,並替代當前範本塊中的文字
G # 獲得記憶體緩衝區的內容,並追加到當前範本塊文字的後面
l # 列表不能列印字元的清單
n # 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令
N # 追加下一個輸入行到範本塊後面並在二者間嵌入一個新行,改變當前行號碼
p # 列印範本塊的行
P # 列印範本塊的第一行
q # 退出Sed
b lable # 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾
r file # 從file中讀行
t label # if分支,從最後一行開始,條件一旦滿足或者T ,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾
T label # 錯誤分支,從最後一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾
w file # 寫並追加範本塊到file末尾
W file # 寫並追加範本塊的第一行到file末尾
! # 表示後面的命令對所有沒有被選定的行發生作用
= # 列印當前行號碼
# # 把註釋擴展到下一個分行符號以前
替換標記:
g # 表示行內全面替換
p # 表示列印行
w # 表示把行寫入一個檔案
x # 表示互換範本塊中的文字和緩衝區中的文字
y # 表示把一個字元翻譯為另外的字元(但是不用於正規表示式)
\1 # 子串匹配標記
& # 已匹配字串標記
元字元集:
^ # 匹配行開始,如:/^sed/匹配所有以sed開頭的行
$ # 匹配行結束,如:/sed$/匹配所有以sed結尾的行
. # 匹配一個非分行符號的任意字元,如:/s.d/匹配s後接一個任意字元,最後是d
* # 匹配0個或多個字元,如:/*sed/匹配所有範本是一個或多個空格後緊跟sed的行
[] # 匹配一個指定範圍內的字元,如/[ss]ed/匹配sed和Sed
[^] # 匹配一個不在指定範圍內的字元,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行
\(..\) # 匹配子串,保存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers
& # 保存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**
\< # 匹配單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行
\> # 匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行
x\{m\} # 重複字元x,m次,如:/0\{5\}/匹配包含5個0的行
x\{m,\} # 重複字元x,至少m次,如:/0\{5,\}/匹配至少有5個0的行
x\{m,n\} # 重複字元x,至少m次,不多於n次,如:/0\{5,10\}/匹配5~10個0的行
範例:
sed 's/old/new/g' file.txt # 將file.txt中的"old"替換為"new"
sed -i 's/old/new/g' file.txt # 直接在file.txt中將"old"替換為"new"
sed -n '5,10p' file.txt # 顯示file.txt的第5行到第10行
awk
一種模式匹配和文字處理的語言,用於對文件中的資料進行掃描和處理。
語法:
awk [選項] 'script' var=value file(s)
awk [選項] -f scriptfile var=value file(s)
選項:
-F fs # 指定輸入分隔符,fs可以是字串或正規表示式,如-F:
-v var=value # 賦值一個使用者定義變數,將外部變數傳遞給awk
-f scriptfile # 從指令碼檔案中讀取awk命令
-m[fr] val # 對val值設定內在限制,-mf選項限制分配給val的最大塊數目;-mr選項限制記錄的最大數目