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

 

posted @ 2020-09-13 22:54  辉煌-love  阅读(408)  评论(0编辑  收藏  举报