1. 程式人生 > 實用技巧 >LINUX核心命令實戰總結四——檔案過濾及內容編輯處理命令一

LINUX核心命令實戰總結四——檔案過濾及內容編輯處理命令一

1.1 cat:合併檔案或檢視檔案內容

【功能說明】

命令cat檢視檔案內容

命令cat的常用5個功能

序號

Cat常用功能

簡要例子說明

1

檢視檔案內容

例如:cat file1.txt

2

把多個檔案合併在一起

例如:cat file1.txt file2.txt >>newfile.txt

3

建立編輯新檔案

例如:輸入cat>file.txt,後面接要編輯的內容,使用快捷方式Ctrl+dCtrl+c可結束編輯。極少使用

4

非互動式的編輯或者追加內容到文傑尾部

這是生產工作中最重要的一個應用,所以要很熟練

例如:cat >> file.txt << EFO

I am yanhuihuang

I 24 year old

EFO

5

清空檔案內容

例如:使用cat /dev/null>file.txt命令就可以把檔案內容清空,但是檔案還是存在的,偶爾使用。

【語法格式】

cat         [OPTION]...         [FILE]...
cat         [選項]...             [檔案]...

【選項說明】

命令cat的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-n

1開始所有輸出的內容按行編號(

*

-b

-n選項功能類似,但會忽略顯示空白行行號。

-s

當遇到有連續兩行以上的空白行時,就替換為一行空白

-A

等價於-vET三個選項的功能之和

-e

等價於 -vE

-E

在每行結尾顯示$符號

-t

-vT等價

-T

Tab字元顯示為^1

-v

除了LDFTAB之外,使用^-M引用

【使用範例】

基礎範例:

執行如下的完整命令生成test.txt檔案內容

[root@web01 ~]# cat > test.txt <<EFO
> I love you
> I am yanhuihuang > very good > EFO

以上執行過程及結果:

[root@web01 ~]# cat test.txt        
> I love you
> I am yanhuihuang
> very good


you are very good
View Code

執行cat命令,分別帶-n-b選項,並對區別

[root@web01 ~]# cat -n test.txt
     1  > I love you
     2  > I am yanhuihuang
     3  > very good
     4
     5
     6
     7
     8
     9
    10
    11  you are very good
[root@web01 ~]# cat -b test.txt
     1  > I love you
     2  > I am yanhuihuang
     3  > very good







     4  you are very good
View Code

執行cat命令,帶-E選項

[root@web01 ~]# cat -E test.txt
> I love you$
> I am yanhuihuang$
> very good$
$
$
$
$
$
$
$
you are very good$
View Code

執行cat命令,帶-s選項

[root@web01 ~]# cat -s test.txt
> I love you
> I am yanhuihuang
> very good

you are very good
View Code

執行cat命令編輯新文字

[root@web01 ~]# cat test2.txt
hello world
[root@web01 ~]# cat test.txt test2.txt
> I love you
> I am yanhuihuang
> very good







you are very good
hello world
View Code

1.2 tac:反向顯示檔案內容

【功能說明】

命令taccat的反向拼寫

【語法格式】

tac         [OPTION]...             [FILE]...
tac         [選項]...             [檔案]...

【選項說明】

命令tac的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-b

在行前而非行尾新增分隔標誌

-r

將分隔標記視作正則表示式來解析

-s

使用指定字串替換行作為分隔標誌

【使用範例】

命令cattac對比

[root@web01 ~]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
>/etc/udev/rules.d/70-persistent-net.rules
[root@web01 ~]# tac /etc/rc.local
>/etc/udev/rules.d/70-persistent-net.rules
touch /var/lock/subsys/local

# want to do the full Sys V style init stuff.
# You can put your own initialization stuff in here if you don't
# This script will be executed *after* all the other init scripts.
#
#!/bin/sh
View Code

1.3 more:分頁顯示檔案內容

【功能說明】

命令more的功能類似於cat,但more會一頁一頁顯示內容。

【語法格式】

   more              [option]      [file ...]
   more              [選項]         [檔案...]

【選項說明】

命令more的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-num

指定螢幕顯示大小為num

+num

從行號num開始顯示(*

-s

把連續的多個空行顯示為一行

-p

不滾屏,而是清除整個螢幕,然後顯示文字

-c

不滾屏,而是從每一屏的頂部開始顯示文字,沒顯示完一行,就清除一行

命令more的交換式子命令及說明

引數選項

解釋說明(帶*的為重點)

H或?

檢視幫助

空格鍵

向下滾動一屏(*

z

向下滾動一屏

Enter

向下滾動一行

f

向下滾動一屏

b

向上滾動一屏

=

輸出當前的行號

/檢視的文字

查詢指定的文字

f

輸出檔名和當前行的行號

v

呼叫vi編輯器

!命令

呼叫shell並執行命令

q

退出並儲存

【使用範例】

命令more後面不接任何引數

[root@web01 ~]# more /etc/services
# /etc/services:
# $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2009-11-10
.......
.......
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
View Code

定義顯示行數

[root@web01 ~]# more  -5 /etc/services
# /etc/services:
# $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2009-11-10
View Code

從指定的行數開始顯示

[root@web01 ~]# more  +888 /etc/services
cableport-ax    282/tcp                 # Cable Port A/X
cableport-ax    282/udp                 # Cable Port A/X
rescap          283/tcp                 # rescap
rescap          283/udp                 # rescap
corerjd         284/tcp                 # corerjd
corerjd         284/udp       
View Code

【技巧示範】

分頁顯示目錄下的內容

[root@web01 ~]# ls /etc/|more -10
abrt
acpi
adjtime
aliases
aliases.db
alsa
alternatives
anacrontab
asound.conf
at.deny
View Code

1.4 less:分頁顯示檔案內容

【功能說明】

命令less指標式記錄開啟文件,快速,消耗少量記憶體。

【語法格式】

less         [option]        [file]
less         [選項]        [文件]

【選項說明】

命令less的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-i

搜尋時忽略大小寫

-m

顯示類似於more命令的進度百分比

-N

顯示每行行號

-s

將連續的空行壓縮為一行顯示

-e

當檔案顯示到結尾時自動退出檔案,若不使用此選項就需要使用互動命令q退出

【使用範例】

[root@web01 ~]# less /etc/services      
# /etc/services:
# $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
#
......
.......
#       http://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private
View Code

顯示行號例子

[root@web01 ~]# less -N /etc/services
      1 # /etc/services:
      2 # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $
      3 #
      4 # Network services, Internet style
      5 # IANA services version: last updated 2009-11-10
View Code

【技巧性範例】

[root@web01 ~]# ls /etc/|less
abrt
acpi
adjtime
aliases
aliases.db
alsa
alternatives
anacrontab
asound.conf
at.deny
audisp
View Code

1.5 head:顯示檔案內部頭部

【功能說明】

命令head用於顯示檔案頭部,預設顯示檔案前10

【語法格式】

head     [OPTION]...     [FILE]...
head     [選項]...         [檔案]...

【選項說明】

命令head引數及說明

引數選項

解釋說明(帶*的為重點)

-n

指定顯示的行數

-c

指定顯示的位元組數

-q

不顯示包含給定檔名的檔案頭

-v

總是顯示包含給定檔名的資料夾

【使用範例】

預設顯示檔案的前10行例子

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
View Code

顯示檔案的前n

[root@web01 ~]# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

顯示前n個位元組

[root@web01 ~]# head -c 10  /etc/passwd
root:x:0:0[root@web01 ~]# 

顯示檔案的最後n行或者n個位元組

[root@web01 ~]# head -n -21 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
View Code

顯示多個檔案

[root@web01 ~]# head -1  /etc/passwd 
root:x:0:0:root:/root:/bin/bash

1.6 tail:顯示檔案內容尾部

【功能說明】

命令tail用於顯示檔案內容的尾部

【語法格式】

tail         [OPTION]...         [FILE]...
tail         [選項]...             [檔案]...

【選項說明】

命令tail的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-c

指定顯示的位元組數

-n

指定顯示的行數

-f

實時輸出檔案變化後追加的資料(*

-F

功能等同於-f --retry

--retry

不停地嘗試開啟檔案直到開啟為止,和-f引數和用

--pid

-f引數合用,在程序結束後自動退出tail命令

-s

監督檔案變化的時間的間隔數(秒)

-q

不顯示包含給定檔名的檔案頭

-v

總是顯示包含給定檔名的檔案頭

【使用範例】

[root@web01 ~]# tail /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
yhh:x:500:500::/home/yhh:/bin/bash
View Code

顯示檔案末尾5行的內容

[root@web01 ~]# tail -n 5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
yhh:x:500:500::/home/yhh:/bin/bash
View Code

從第十五行開始顯示檔案

[root@web01 ~]# tail -n +15 /etc/passwd
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
yhh:x:500:500::/home/yhh:/bin/bash
View Code

實時監控檔案變化

[root@web01 ~]# echo abc >> aa
[root@web01 ~]# 
[root@web01 ~]# tail -f aa
111
222
abc

引數-F的使用

[root@web01 ~]# tail -f a
tail: 無法開啟"a" 讀取資料: 沒有那個檔案或目錄
tail: 沒有剩餘檔案
[root@web01 ~]# tail -F a
tail: 無法開啟"a" 讀取資料: 沒有那個檔案或目錄
^C
[root@web01 ~

1.7 tailf:跟蹤日誌檔案

【功能說明】

命令tailf幾乎和tail -f相同,不同的是如果檔案不增長,那麼它不會去訪問磁碟檔案,也不會更改檔案的訪問時間

【語法格式】

tailf         [OPTION]         file
tailf         [選項]         檔案

【選項說明】

命令tailf的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-n

指定顯示的行數,預設是最後10

【使用範例】

跟蹤日誌檔案

[root@web01 ~]# tailf aa
111
222
abc
abc1
[root@web01 ~]# echo abc1 >> aa
[root@web01 ~]# 

1.8 cut:從文字中提取一段文字並輸入

【功能說明】

命令cut從檔案的每行剪下位元組,字元或欄位,並將這些位元組,字元或欄位輸出至標準輸出

【語法格式】

cut         OPTION...         [FILE]...
cut         選項...         [檔案]...

【選項說明】

命令cut的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-b

以位元組為單位進行分割

-n

取消分隔多位元組字元,與選項-b一起使用

-c

以位元組為單位進行分隔(*

-d

自定義分隔符,預設以tab為分隔符

-f

-d一起使用,指定顯示那個區域(*

N

N個位元組,字元或欄位

N-

從第N個位元組、字元或欄位開始至行尾(*

N-M

從第N個到M個位元組、字元或欄位開始至行尾(*

-M

從第1個到M個位元組、字元或欄位開始至行尾(*

【使用範例】

以位元組為分隔符

[root@web01 ~]# echo I am yanhuihuang my QQ is 88888888 >aa
[root@web01 ~]# cat aa
I am yanhuihuang my QQ is 88888888
[root@web01 ~]# cut -b -3 aa
I a
[root@web01 ~]# cut -b 3- aa
am yanhuihuang my QQ is 88888888
[root@web01 ~]# cut -b -3,3- aa
I am yanhuihuang my QQ is 88888888
View Code

以位元組為分隔符(英文字母是單位元組字元)

[root@web01 ~]# cut -c 2-10 aa
 am yanhu
[root@web01 ~]# cut -b 2-10 aa 
 am yanhu
View Code

自定義分隔例子

[root@web01 ~]# cut -d : -f 1 /etc/passwd
root
bin
........
........
yanhuihuang
yanhuihuang1
View Code

1.9 split:分隔檔案

【功能說明】

命令split可以按照指定的行數或者指定檔案大小進行分隔

【語法格式】

split         [OPTION]...     [INPUT ]        [PREFIX]
split         [選項]...          [輸入檔案 ]    [輸出檔名字首]

【選項說明】

 split         [OPTION]...     [INPUT ]        [PREFIX]
 split         [選項]...          [輸入檔案 ]    [輸出檔名字首]
View Code

命令split的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-b

指定分隔檔案的最大位元組數

-l

指定分隔後文件的最大行數

-a

指定字尾長度,預設為2位字母

-d

使用數字字尾

【使用範例】

[root@web01 data]# split -l 10 inittab new_ 
[root@web01 data]# ls new*
new_aa  new_ab  new_ac
[root@web01 data]# split -l 10 -d inittab new2_   
[root@web01 data]# wc -l new2_*                
  10 new2_00
  10 new2_01
   6 new2_02
  10 new2_aaa
  10 new2_aab
   6 new2_aac
  52 總用量
View Code

按照檔案大小分隔

[root@web01 data]# split -b 1k -d inittab new3_   
[root@web01 data]# ls new3*
new3_00

1.10 paste:合併檔案

【功能說明】

命令paste能將檔案按照行與行進行合併,中間使用tab隔開。

【語法格式】

paste         [OPTION]...         [FILE]...
paste         [選項]...             [檔案]...

【選項說明】

命令paste的引數選項及說明

引數選項

解釋說明(帶*的為重點)

-d

指定合併的分隔符,預設是TAB(*)

-s

每個檔案佔用一行

【使用範例】

[root@web01 data]# paste test1 test2
1       aaaa
2       bbbbb
3       cccccc
4
5
6
View Code

通過-d可以指定分隔符

[root@web01 data]# paste -d : test1 test2
1:aaaa
2:bbbbb
3:cccccc
4:
5:eeeeeeeeeeeeee
6:ggggggg
View Code

通過-s合併內容,使其成行

[root@web01 data]# paste -s test1
1       2       3       4       5       6
[root@web01 data]# paste -s test2
aaaa    bbbbb   cccccc          eeeeeeeeeeeeee  ggggggg
[root@web01 data]# paste -s test1 test2
1       2       3       4       5       6
aaaa    bbbbb   cccccc          eeeeeeeeeeeeee  ggggggg
View Code

cat命令合併文字的方式進行對比

[root@web01 data]# cat test1 test2
1
2
3
4
5
6
aaaa
bbbbb
cccccc

eeeeeeeeeeeeee
ggggggg
View Code

【生產案例】

假設通過shell指令碼生成的賬號密碼如下:

stu001
7f77sj
stu002
tsuydh
stu003
dhksnk
stu004
xdkack
stu005
dxhiai
stu006
nbkcac
stu007
dbakk1
stu008
dbm09s
View Code

現在要求使用命令將上面文字轉換成SVN服務配置檔案的賬號及密碼格式

stu001=7f77sj
stu002=tsuydh
stu003=dhksnk
stu004=xdkack
stu005=dxhiai
stu006=nbkcac
stu007=dbakk1
stu008=dbm09s
View Code

方法一:

[root@web01 data]# paste -s test4
stu001  7f77sj  stu002  tsuydh  stu003  dhksnk  stu004  xdkack  stu005  dxhiai  stu006  nbkcac  stu007  dbakk1  stu008  dbm09s
[root@web01 data]# paste -sd '=\n' test4
stu001=7f77sj
stu002=tsuydh
stu003=dhksnk
stu004=xdkack
stu005=dxhiai
stu006=nbkcac
stu007=dbakk1
stu008=dbm09s

方法二:

[root@web01 data]# paste -d '=' - - <test4
stu001=7f77sj
stu002=tsuydh
stu003=dhksnk
stu004=xdkack
stu005=dxhiai
stu006=nbkcac
stu007=dbakk1
stu008=dbm09s

方法三:xargs+sed命令實現

[root@web01 data]# xargs -n 2 < test4
stu001 7f77sj
stu002 tsuydh
stu003 dhksnk
stu004 xdkack
stu005 dxhiai
stu006 nbkcac
stu007 dbakk1
stu008 dbm09s
[root@web01 data]# xargs -n 2 < test4|sed 's# #=#g'
stu001=7f77sj
stu002=tsuydh
stu003=dhksnk
stu004=xdkack
stu005=dxhiai
stu006=nbkcac
stu007=dbakk1
stu008=dbm09s
View Code

方法四:

[root@web01 data]# sed 'N;s#\n#=#g' test4
stu001=7f77sj
stu002=tsuydh
stu003=dhksnk
stu004=xdkack
stu005=dxhiai
stu006=nbkcac
stu007=dbakk1
stu008=dbm09s