歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Bash常用文本處理工具用法

Bash常用文本處理工具用法

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

1、grep命令:查找文件裡符合條件的字符串
一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來
語法格式: grep [options]
-i:ignore-case 忽略大小寫差別
-c:count 只打印匹配的總行數,不顯示匹配的內容信息
-n:line-number 在匹配的行前面打印行號
-v:revert-match 反檢索,只顯示不匹配的行
-r:recursion遞歸地,讀取每個文件夾下的所有檔案
-l :不顯示平常一般的輸出結果,只顯示符合的文件名稱

2、awk命令:一個強大的文本處理工具,逐行掃描,從第一行到最後一行
使用語法:awk 'pattern{action}' filename
pattern:正則表達式
action:輸出語法
你可以省略pattern和 action之一,但不能兩者同時省略,當省略pattern時沒有樣式匹配,表示對所有行(記錄)均執行操作,省略action時執行缺省的操作——在標准輸出上顯示。
語法格式:awk [ -F re] [parameter...]
-F re:允許awk更改其字段分隔符
parameter: 該參數幫助為不同的變量賦值
-v:定義變量
-f:指定腳本文件
三種調用方式:
1、awk命令行
2、使用-f選項調用awk程序,例如:awk -f progfile file ,其中progfile是指定一個文本文件
3、利用命令解釋器調用awk程序,需要在awk腳本聲明調用方式,例如:#!/bin/awk -f
命令行方式使用內容過濾:
[root@test ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#顯示分隔符指定列(1列),分隔符默認是空格,$1是顯示分隔符前面一列

#顯示test文件中匹配123的行
[root@test ~]# awk '/123/ {print $1}' test
#顯示所有以a或f開頭的行

4、sed命令:一種在線編輯器,它一次處理一行內容
處理時,把當前處理的行存儲在臨時緩沖區中,稱為'模式空間'(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。
常用參數:
i 插入
s 替換
e 多點編輯
d 刪除
a 追加到行後面
g 全部替換,無g只替換每行第一個
q 退出
#將所有包含aaa替換為jjj
sed 's/aaa/jjj/' test
#把這行注釋去掉,替換文本
sed -i 's/#ServerName www.example.com:80/ ServerName 192.168.0.202:80/g'
將所有包含/var/www/html/替換為/opt/web/,分隔符'/'可以用別的符號代替,比如 ',' '_' '|' 等
sed -i s/\/var\/www\/html/\/opt\/web/' /etc/httpd/conf/httpd.conf
等同於:
sed -i 's_/var/www/html/_/opt/web/_' /etc/httpd/conf/httpd.conf
#插入一行到391行,包括特殊符號'/'
sed -i '391 s/^/AddType application\/x-httpd-php .php.html/' httpd.conf
#只打印第一行數據
sed -n '1p' /etc/passwd
#打印包含root的行,禁止默認輸出
sed -n '/root/p' /etc/passwd
#刪除13行
sed -i '13d' /etc/passwd
#刪除13行到最後一行
sed -i '13,$d' /etc/passwd
#將包含uucp的行刪除
sed -i '/uucp/d' /etc/passwd
5、find命令:查找具有某一特征的文件(例如文件權限、文件屬主、文件長度、文件類型等
用法:find [path] [options] [條件]
Path:查找路徑
Options:選項
例如:
-name:按照文件名查找文件
-mtime:按照文件的更改時間來查找文件,後跟-n、+n來表示多少天內和以前
-user:按照文件屬主來查找文件
-group:按照文件所屬的組來查找文件
-type:查找某一個類型的文件,諸如:b(塊設備)、d(目錄)、l(符號鏈接)、f(普通文件)
-size:根據文件大小來查找文件
#在根目錄查找更改時間在5日以內的文件
find /tmp -mtime -5
#在/var目錄下查找更改時間在3日以前的文件
find /var/ -mtime +3
#查找系統中所有文件長度為0的普通文件,並列出他們的完整路徑
find / -type f -size 0 -exec ls -l {} \;
#查找/var/log目錄中更改時間在7日以前的普通文件,並刪除他們
find /var/log/ -type f -mtime +7 -exec rm {} \;
#找出用戶test擁有的文件,並將他們拷貝到/root/test目錄中
find / -user test -exec cp {} /root/test \;
6、sort命令:對文件中的各行進行排序
sort命令將逐行對文件中的內容進行排序,如果兩行的首字符相同,該命令將繼續比較這兩行的下一字符,如果還相同,將繼續進行比較.
格式:sort [選項] 文件
主要選項:
-r:倒序排序,默認是升序。
-n:按數值大小進行排序
-k:KeyDefinition 指定排序關鍵字。
-t:Character 指定 Character 作為字段分隔符
-d:使用字典順序排序。比較中僅考慮字母、數字和空格
-f:將小寫字母與大寫字母同等對待
-u:去掉重復的行,使文件中的每一行唯一
7、uniq命令:刪除文件中的重復行
文件經過處理後在它的輸出文件中可能會出現重復的行。例如,使用cat命令將兩個文件合並後,再使用sort命令進行排序,就可能出現重復行。這時可以使用uniq命令將這些重復行從輸出文件中刪除,只留下每條記錄的唯一樣本。
格式:uniq [選項] 文件
主要選項:
-c:顯示行號
-d:只顯示重復行。
-u:只顯示文件中不重復的各行。
8、cut命令:顯示文件中每行的指定內容
格式:cut -d 分隔字符 [-cf] fields
-d:後面接的是分隔字符,默認情況下為Tab;
-c:後面接的是第幾個字符
-f:後面接的 是第幾個區塊
#列出/etc/passwd文件中的所有用戶,按照升序排列
cut -d : -f 1 /etc/passwd | sort
#顯示/etc/passwd文件下uid為0的用戶名以及uid。
cut -d : -f 1,3/etc/passwd|grep ':0$'
正則表達式'$'表示以字符結尾,'^'表示以某字符開始。
9、tr命令:從標准輸入刪除或替換字符,可以看為sed簡化軟件
常用選項的tr命令格式為:
-d 刪除字符串1中所有輸入字符。
-s 刪除所有重復出現字符序列,只保留第一個。
#將小寫字符轉換成大寫
tr 'a-z' 'A-Z' < file
#將文件中刪除所有空字符
tr –d ‘\0’< file
#刪除文件中shell字符
cat test | tr -d 'shell'
#將文件中所有abc字符替換efg並另存為新文件
cat test | tr 'abc' 'efg' >new file
10、其他文本處理命令
cat:從頭開始顯示內容,並將所有內容輸出
常用參數,-n顯示輸出的行數編號
tac:從最後一行倒序顯示內容,並將所有內容輸出
head:默認顯示頭10行,-n指定顯示多少行數
tail:默認顯示最後10行,-n指定顯示多少行數,-f實時顯示內容
more:分屏查看文本文件
less:和more類似,但可以往前翻頁
nl:顯示時輸出行號
wc:計算文件的字節數、單詞數和行數
常用參數:-c統計字節數,-l統計行數,-m統計字符數

Copyright © Linux教程網 All Rights Reserved