文件管理相关命令

Linux 命令学习-文件管理相关命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,文件相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

创建文件的相关命令

touch 常用于将每个文件的访问和修改时间更新为当前时间,不过当直接跟一个不存在的文件名时,会创建一个空文件,大小为0

1
2
3
4
touch tody.txt
#通过ll tody.txt查看
ll tody.txt
-rw-r--r-- 1 test test 0 7月 11 10:59 dody.txt

> 通常用于重定向一个命令的输出到一个新文件中,如果之前没有命令,则会创建一个新文件,大小为0,比如可以用echo,print等命令结合>将输出重定向到一个新文件

1
2
3
4
5
6
ll dody.txt
-rw-r--r-- 1 test test 19 7月 11 11:06 dody.txt
> tody.txt
echo 'This is a new file' > ne.txt
➜ ll ne.txt
-rw-r--r-- 1 test test 19 7月 11 11:11 ne.txt

ps:如果你不是想创建新的,而是想追加内容到已有的文件,那么可以使用>>

vi/vim Vi是Unix及Linux系统下标准的编辑器,Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。可以使用vi/vim创建新文件。

1
2
#以下命令打开一个文件,需要保存,否则修改不生效
vi asbt.txt

查看文件内容的相关命令

cat 最常用的方式是将文件一次性全部输出到标准输出,或者将几个文件合并为一个文件
cat [-AbeEnstTuv] [–help] [–version] fileName

1
2
cat b.txt
cat a.txt b.txt > c.txt

more 与cat类似,不过是以分页的形式输出,按空格可以向前,按b可以退后,
格式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
常用参数:
-num 一次显示的行数
+num 从第 num 行开始显示
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

1
2
more b.txt
more +20 b.txt

less 与 more 类似,但使用 less 可以随意浏览文件,可以使用方向键控制方向,而且 less 在查看之前不会加载整个文件。
格式:less [options] filename
常用参数:
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-i 忽略搜索时的大小写
-m 显示类似 more 命令的百分比
-N 显示每行的行号
-s 显示连续空行为一行

1
2
3
4
#显示行号
less -N b.txt
## 分页显示进程信息
ps -aux | less

ps: more 与less的不同

  1. less提供了更丰富的控制方式,比如可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
  2. less不必读整个文件,加载速度会比more更快
  3. less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容

head 查看文件的开头部分的内容
格式:head [options] filename
常用参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数,默认为 10,即显示 10 行的内容

1
head b.txt

tail 查看文件的最后的内容,常用于查阅正在改变的日志文件
格式:tail [options] filename
-f 循环读取 常用于查阅正在改变的日志文件
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容

1
tail -f xxx.log

删除移动复制文件等相关命令

rm 用于删除一个文件或者目录
格式:rm [options] name…
常用参数:

  1. -i 删除前逐一询问确认。
  2. -f 强制删除即使原档案属性设为唯读,亦直接删除,无需逐一确认。
  3. -r 递归地移除目录及它们的内容
  4. -d 删除空目录
1
2
3
4
5
6
7
8
9
10
11
rm tody.txt
rm:是否删除普通空文件 'tody.txt'?n

# 不加r参数无法删除目录
mkdir md
rm md
rm: 无法删除 'md': 是一个目录

rm -r md
rm:是否删除目录 'md'?y

mv 可以将文件或目录改名、或将文件或目录移入其它位置
格式:
mv [选项]… 源文件 目标文件
mv [选项]… 源文件… 目录
常用命令:

  1. -i 覆盖前提示
  2. -f 覆盖前永不提示
1
2
3
4
5
# 重命名
mv tody.txt todx.txt

# 移动文件到目录中
mv todx.txt subdir/

ps: mv 源目录名 目标目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则将源目录改名

cp 主要用于复制文件或目录
格式:
cp [选项]… 源文件 目标文件
cp [选项]… 源文件… 目录
常用命令:

  1. -i 覆盖前提示
  2. -f 覆盖前永不提示
  3. -r 若给出的源文件是一个目录文件,此时递归复制目录及它们的内容
  4. a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合
  5. -d 复制时保留链接
  6. -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
1
cp -r test/ newtest

file 用于辨识文件类型
格式:file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻数文件 ] file …
常用命令:

  1. -b  列出辨识结果时,不显示文件名称。
  2. -c   检查时打印输出幻数文件的解析结果.常与 -m 一起使用,用来在安装幻数文件之前调试它
  3. -f<名称文件>  指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
  4. -L  直接显示符号连接所指向的文件的类别。
  5. -m<幻数文件>  指定魔法数字文件。
  6. -v  显示版本信息。
  7. -z  尝试去解读压缩文件的内容。
  8. [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
1
2
3
4
5
6
7
8
9
file add.c
add.c: C source, ASCII text

file -b add.c
C source, ASCII text

file add.o
add.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

修改文件属性等命令

touch 于修改文件或者目录的时间属性。比如访问时间、修改时间。
格式:touch [选项]… 文件列表…

  1. -a 仅更改文件访问时间
  2. -c,–no-create 假如目的档案不存在,不会建立新的档案
  3. -d, --date=字符串 使用指定字符串所表示的时间而非当前时间
  4. -f (被忽略的选项)
  5. -h, --no-dereference 影响所有符号链接而非被引用的文件(仅在能够更改符号链接的时间戳的系统上有用)
  6. -m 改变档案的修改时间记录。
  7. r–reference=文件 使用指定文件的时间记录
  8. -t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间
  9. –time=关键字 改变文件的指定时间:若关键字是 access,atime 或 use,则等同于 -a;若关键字是modify 或 mtime,则等同于 -m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# ls -l 查看最后时间
ls -l touchTestFile
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:09 touchTestFile

# 修改文件时间属性为当前系统时间
touch touchTestFile
ls -l touchTestFile #查看文件的时间属性
-rw-r--r-- 1 shaozuo shaozuo 0 8月 2 10:13 touchTestFile
# 也可以使用stat查看时间
stat touchTestFile
文件:touchTestFile
大小:0 块:0 IO 块:4096 普通空文件
设备:30h/48d Inode:344 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 1000/ shaozuo) Gid:( 1000/ shaozuo)
最近访问:2020-08-02 10:13:07.864729079 +0800
最近更改:2020-08-02 10:13:07.864729079 +0800
最近改动:2020-08-02 10:13:07.864729079 +0800
创建时间:-

chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。
ps:这个命令只有root才能执行。
格式:chown [选项]… [所有者][:[组]] 文件…
chown [选项]… --reference=参考文件 文件…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件
    1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
    2. -L 遍历每一个遇到的指向目录的符号链接
    3. -P 不遍历任何符号链接(默认)

ps:如果没有指定所有者,则不会更改所有者信息。若所属组若没有指定也不会对其更改,但当加上’:’ 时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。

1
2
3
# 递归修改文件夹的组和所有者
chown -R shaozuo:devel fun
chown shaozuo tstfile

chgrp 与chown命令类似,不过只用于变更文件或目录的所属群组。
格式: chgrp [选项列表]… 组 文件…
chgrp [选项列表]… --reference=参考文件 文件…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件
    1. -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
    2. -L 遍历每一个遇到的指向目录的符号链接
    3. -P 不遍历任何符号链接(默认)
1
2
3
4
# 递归修改文件夹的组
chgrp -R devel fun
# 修改文件夹的组
chgrp devel tstdir

chmod
格式:chmod [选项]… 模式[,模式]… 文件列表…
chmod [选项]… 八进制模式字符串 文件列表…
chmod [选项]… --reference=参考文件 文件列表…

  1. -c, --changes 显示更改的部分的信息
  2. -f, --silent, --quiet 忽略错误信息
  3. –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
  4. -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
  5. –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
  6. –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
  7. -R : 处理指定目录以及其子目录下的所有文件

其中模式(mode)的格式如下:
[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
其中:

  1. u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
    • 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
  2. r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
  3. 数字也可以表示权限,r=4,w=2,x=1。所以可读可写是rw=4+2=6
1
2
3
4
# 设置一个文件的权限有多种写法,比如将file.txt设置为自己可读可写,组可读可写,其他人可读可写
chmod ugo+rw file.txt
chmod a+aw file.txt
chmod 666 file.txt

ps: chown、chgrp与chmod都是由同样的程序员编写的,所以它们的参数与使用方式都很类似

查找文件

find 用来在指定目录下查找文件
格式:find [path…] [expression]

  1. path find之后直接是要查找的路径,如果path是空的,则搜索当前路径和其子目录。
  2. expression 第一个 - ( ) , ! 之后的是 expression,如果expression 是空字串则使用 -print 为预设 expression,表达式有三部分
    1. 选项
    2. 测试
    3. 动作

常用的expression:

  1. 选项:
    1. -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime,-cmin, -ctime, -mmin, and -mtime)
    2. -depth 先处理目录的内容再处理目录本身
    3. -maxdepth levels 进入命令行参数指定的目录下层目录时,最深不超过levels
    4. -mindepth levels 不在levels(一个非负整数)层之内执行任何测试和动作
    5. -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
  2. 测试:
    1. +n,-n, n 比n大,比n小,正好是n
    2. -amin n : 在过去 n 分钟内被读取过
    3. -anewer file : 比文件 file 更晚被读取过的文件
    4. -atime n : 在过去n天内被读取过的文件
    5. -cmin n : 在过去 n 分钟内被修改过
    6. -cnewer file :比文件 file 更新的文件
    7. -ctime n : 在过去n天内被修改过的文件
    8. -empty : 空的文件
    9. -name pattern 基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配
    10. -path pattern 文件名与shell模式pattern相匹配
    11. -type c c代表类型,d : 目录,f: 一般文件,l: 符号连结,等等。
  3. 动作:
    1. -exec command ;执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find其余的命令行参数将作为提供给命令的参数,直到遇到一个由 ;' 组成的参数为止。命令的参数中,字符串{}’ 将以正在处理的文件名替换。所有的{}'都会被替换,不仅是在单独的一个参数中.有些版本的 find不是这样做的。 这些参数可能需要用' 来escape 或者用括号括住,防止它们被shell展开。命令是从起始目录执行的
    2. -ok command ; 类似 -exec 但是会先向用户询问 (在标准输入); 如果回应不是以 y' 或Y’ 起始则不会运行 command 而是返回false。
1
2
3
4
5
6
7
8
9
10
# 查找当前目录及子目录下以.s结尾的文件
find -name "*.s"
./d_add.s
./add.s

# 将目前目录及子目录下中所有一般文件列出
find -type f

# 查找当前目录及子目录下以.out结尾的文件,删除,删除之前询问一下
find -name "*.out" -ok rm {} \;

对比文件

diff 以逐行的方式,比较文本文件的异同处
格式: diff [选项] 源文件 目标文件
diff选项有很多,可以访问如下路径查看diff中文文档
有两个文件,a.txt如下

1
2
3
4
5
6
7
8
9
a
b
c
d

d
c
b
a

b.txt如下:

1
2
3
4
5
6
7
8
9
10
a
d
c
b

d
f
f
b
a

当使用diff a.txt b.txt时,输出如下结果:

1
2
3
4
5
6
7
8
9
10
11
2,3d1
< b
< c
4a3,4
> c
> b
7c7,8
< c
---
> f
> f

现在让我们来解释一下该输出的结果
首先介绍一些概念:

  1. 变动位置 由三部分组成:行号[adc]行号
    1. 变动方式 adc 分别表示“增加”,“删除”,“内容改变”
    2. 在adc之前的数字表示源文件中的行,
    3. 之后的数字表示目标文件中的行
  2. < > 分别表示源文件和目标文件
  3. — 用来分割两个文件

所以

1
2
3
4
5
6
7
8
9
10
11
2,3d1 #源文件中删除第2,3行
< b
< c
4a3,4 #将以下行增加到目标文件中的第3,4行
> c
> b
7c7,8 #件源文件中的第7行删除,---下表示增加将以下行增加到目标文件中的第7,8行
< c
---
> f
> f

cmp 按字节比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号
格式: cmp [选项]… 文件1 文件2

  1. -c或–print-chars  除了标明差异处的十进制字码之外,一并显示该字符所对应字符。
  2. -i<字符数目>或–ignore-initial=<字符数目>  指定一个数目。
  3. -l或–verbose  标示出所有不一样的地方。
  4. -s或–quiet或–silent  不显示错误信息。
  5. -v或–version  显示版本信息。
  6. –help  在线帮助。
1
2
cmp aa.txt bb.txt
aa.txt bb.txt 不同:第 3 字节,第 2 行

分割文件

split 用于将一个文件分割成数个。
格式:split [OPTION] [INPUT [PREFIX]]
参数

  1. -<行数> 或 -l num : 指定每多少行切成一个小文件
  2. -b<字节> : 指定每多少字节切成一个小文件,可以使用后缀:b=512字节,k=1K,m=1 Meg
  3. -C<字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性

[PREFIX] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
ps: 该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
如果没有设置[PREFIX]则默认以"x"开头,
如果没有指定INPUT,或INPUT是-,就从标准输入读取数据.

1
2
3
4
split -6 a.c
$ ls #执行ls指令
#获得当前目录结构
a.c xaa xab

csplit 用于将文件依照指定的范本样式分割
格式:csplit [OPTION]… FILE PATTERN…
选项:

  1. -b<输出格式>或–suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
  2. -f<输出字首字符串>或–prefix=<输出字首字符串>:预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01…
  3. -k或–keep-files:保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件;
  4. -n<输出文件名位数>或–digits=<输出文件名位数>:预设的输出文件名位数其文件名称为xx00,xx01…如果用户指定输出文件名位数为“3”,则输出的文件名称会变成xx000,xx001等;
  5. -q或-s或–quiet或——silent:不显示指令执行过程;
  6. -z或–elide-empty-files:删除长度为0 Byte文件。

格式:

  1. /[正则表达式]/ 创建从当前行开始直到(但不包含)包含指定模式的那一行的段的文件。
  2. INTEGER 创建从当前行开始直到(但不包含)指定行
  3. {*} 表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
  4. %[正则表达式]% 使包含指定模式的行成为当前行,但不为段创建一个文件。
1
2
3
4
5
6
7
8
9
10
11

csplit file1 3 #会将文件file1切分为两个文件,一个包含1-2,另一个包含3-end

csplit file1 11 22 33 44 #会将文件file1切分5为个文件,一个包含1-10,11-21,22-32,33-43,44-

csplit file1 100 {*} #会将文件file1按照100行切分,直到末尾

csplit -n 3 file1 120 # 将文本文件file1以120行为分界点切割成2份,并指定输出文件名的位数为3

csplit file1 /"Chapter X"/ # 文件以字符串”Chapter X”为分界符,分成两部分

统计文件中信息

wc 用于计算字数,如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
格式: wc [选项]… [文件列表]
选项:

  1. -c, --bytes 输出字节统计数
  2. -m, --chars 输出字符统计数
  3. -l, --lines 输出换行符统计数
  4. -w, --words 输出单词统计数
1
2
3
4
5
6
7
8
9

wc add.c
11 23 149 add.c # 行数为11、单词数23、字节数149

wc add.c add.s
11 23 149 add.c
56 122 895 add.s
67 145 1044 总用量

文本排序

sort 用于将文本文件内容加以排序。它以行为单位来排序。
格式:[OPTION]… [FILE]…
常用选项:

  1. -b 忽略每行前面开始出的空格字符。
  2. -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  3. -f 排序时,将小写字母视为大写字母。
  4. -g 按照通常的数值进行比较,,暗含-b
  5. -i 排序时,只考虑[\040-\0176]字符。
  6. -m 将几个排序好的文件进行合并。
  7. -M 将前面3个字母依照月份的缩写进行排序。
  8. -n 依照字符串的数值的大小排序,暗含-b
  9. -u 意味着是唯一的(unique),输出的结果是去完重了的。
  10. -o<输出文件> 将排序后的结果存入指定的文件。
  11. -r 以相反的顺序来排序。
  12. -t<分隔字符> 指定排序时所用的栏位分隔字符。
  13. -k POS1[,POS2] 从关键字POS1开始,POS2结束. 字段数和字符偏移量都从1开始计数(与+POS1选项比较)
  14. +POS1 [-POS2] 从关键字POS1开始,到POS2之前结束(快过时了) 字段数和字符偏移量都从零开始计数(与-k选项比较)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat testsort.txt
Math 95
English 85
Physics 30
Chemistry 70

sort testsort.txt
Chemistry 70
English 85
Math 95
Physics 30

sort -r testsort.txt # 相反顺序排序
Physics 30
Math 95
English 85
Chemistry 70

uniq 用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
选项:uniq [选项]… [输入 [输出]]
常用选项:

  1. -c或–count 在每列旁边显示该行重复出现的次数。
  2. -d或–repeated 仅显示重复出现的行列。
  3. -D 显示所有重复的行
  4. -f, --skip-fields=N 比较时跳过前 N 个域、
  5. –group[=METHOD] 显示所有行,用一个空行分隔每一组 METHOD={separate(default),prepend, append, both}
  6. -i, --ignore-case 比较时忽略大小写
  7. -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
  8. -u或–unique 只显示不重复的行。
  9. -w, --check-chars=N 对每行第 N 个字符以后的内容不作比较
  10. [输入] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
  11. [输出] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

域指一个由空字符(通常是空格和/或制表符)和紧随的非空字符组成的序列。同时使用跳过域和跳过字符选项时,先跳过域再跳过字符。

ps:uniq只对相邻的重复行进行处理,所以需要提前使用sort进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
cat testuniq.txt
Math 95
Math 95
Math 95
English 85
English 85
English 85
English 85
Physics 30
Physics 30
Chemistry 70
Chemistry 70
Chemistry 70
Chemistry 70

uniq testuniq.txt
Math 95
English 85
Physics 30
Chemistry 70

uniq -c testuniq.txt
3 Math 95
4 English 85
2 Physics 30
4 Chemistry 70

文件内容查找

grep 命令用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
grep 有两个变种变种,egrep 和 fgrep 。 Egrep 与 grep -E 相同。 Fgrep 与 grep -F 相同。

格式:grep [options] PATTERN [FILE…]
常用选项:

  1. -a 或 --text : 不要忽略二进制的数据。
  2. -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  3. -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
  4. -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  5. -c 或 --count : 计算符合样式的列数。
  6. -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  7. -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  8. -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  9. -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  10. -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  11. -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  12. -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  13. -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  14. -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  15. -i 或 --ignore-case : 忽略字符大小写的差别。
  16. -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  17. -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  18. -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  19. -o 或 --only-matching : 只显示匹配PATTERN 部分。
  20. -q 或 --quiet或–silent : 不显示任何信息。
  21. -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  22. -s 或 --no-messages : 不显示错误信息。
  23. -v 或 --revert-match : 显示不包含匹配文本的所有行。
  24. -V 或 --version : 显示版本信息。
  25. -w 或 --word-regexp : 只显示全字符合的列。
  26. -x --line-regexp : 只显示全列符合的列。
  27. -y : 此参数的效果和指定"-i"参数相同。
1
2
3
4
5
grep match_pattern file_name # 在文件中搜索一个单词
grep "match_pattern" file_1 file_2 file_3 #在多个文件中查找
grep -v "match_pattern" file_name #输出除之外的所有行

grep –e "正则表达式" 文件名 #使用正则表达式