红联Linux门户
Linux帮助

Linux下sed,awk,grep,cut,find等常用命令介绍

发布时间:2014-09-13 10:39:46来源:linux网站作者:gdcsy

Linux文件查找命令find,xargs

find命令的格式:

find pathname -options [-print -exec -ok ...]

find 命令的参数:

-perm

按照文件权限模式查找
读权限:r:4 写权限:w:2 执行权限:x:1
文件属主具有读、写权限: rw:4+2=6
其他用户具有读权限:r:4

-type

查找的文件类型
-type f 文件
-type d 目录
-type l 符号链接文件

-exec

-exec 参数后面跟的是 command命令
command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'
'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
对于不同的系统,直接使用分号可能会有不同的意义, 使用转义符 '\'在分号前明确说明

xargs

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。


sed
sed简介:

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
关于sed的hold space(内存缓冲区)和pattern space(模式空间)

sed在处理文件的时候,每一行都需要存放在一个叫“模式空间”的临时缓存区。每处理完一行,便清理一次(pattern space),并把下一行再次放入该临时缓冲区。

而保留空间(hole space),是当sed用到h命令的时候,把匹配的模式放在一个叫做"hold buffer"的保留缓冲里,但需要使用G(sed的取得命令)的时候,sed 从这个保留空间(hold space)中取得。

sed 是以行为单位进行读取,读取后的内容存放在pattern space。

holding space是通过h,H,x,g,G命令和pattern space产生关连,利用这5个特性可以辅助pattern space解决问题。

g

表示行内全面替换,当前处理行进行全局替换。

G

获得内存缓冲区的内容,并追加到当前模板块文本的后面。
函数参数G 与g 唯一差别是, sed执行g 时, 数据盖掉(overwrite) pattern space 内原来的数据
而G , 数据则是"添加(append)" 在pattern space 原来数据后。

‘;’号

如果在一行中有多个命令,要用分号隔开。

s/re/string

用string替换正则表达式re。

d

从模板块(Pattern space)位置删除行。

函数参数d 表示删除数据行, 其指令格式如下:
[address1[ ,address2]] d

对上述格式有下面几点说明:
函数参数d 最多与两个地址参数配合。

sed执行删除动作情况如下:
将pattern space 内符合地址参数的数据删除。
将下一笔资料读进pattern space 。
重新执行sedscript。
n

读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。

函数参数n 表示读入下一行资料。
其指令格式如下:
[address1[ ,address2]] n
对上述格式有下面几点说明:
函数参数n 最多配合两个地址参数。

sed执行读入下一行动作的情况如下:
输出在pattern space 的数据。
将下一笔资料读到pattern space。
执行下一个编辑指令。

-n, --quiet, --silent

安静模式,取消默认输出。

x

交换pattern和hold space

p

打印模式空间的行,通常 p 会与参数 sed -n 一起使用

N

追加下一行数据到模式空间,数据行间以换行字符(embedded newline character)分隔。

函数参数N 表示添加下一笔资料在pattern space 内。
其指令格式如下:
[address1 ,[address2]] N
对上述格式有下面几点说明:
函数参数N 最多配合两个地址参数。

sed执行时, 将下一行数据读入并添加在pattern space 内, 数据行间以换行字符(embedded newline character)分隔。
此外, 在替换时, 换行字符可用\n 来match。

=

打印当前行号

.

匹配一个非换行符的字符

h

拷贝模板块的内容到内存中的缓冲区。

!

表示后面的命令对所有没有被选定的行发生作用。

$

锚定行的结束 如:/sed$/匹配所有以sed结尾的行。也可以表示文件最后一行。

1

表示文件第一行

-e

直接在指令列模式上进行 sed 的动作编辑,允许多台编辑。

:label

表示建立一个标签label

b

跳转命令,这个命令是无条件跳转
ba表示跳转到标签a处

q

退出Sed。

D

删除模板块的第一行。

函数参数D 与d 的比较如下:
当pattern space 内只有一数据行时, D 与d 作用相同。
当pattern space 内有多行资料行时D 表示只删除pattern space 内第一行资料; d 则全删除。
D 表示执行删除后, pattern space 内不添加下一笔数据, 而将剩下的数据重新执行sedscript ; d 则读入下一行后执行sedscript。


grep
grep简介:

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包 括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是 fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux 使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

-l

打印匹配模板的文件清单

-r

递归地搜索目录。在缺省情况下,按照到目录的链接。

^

锚定行的开始

[^]

匹配一个不在指定范围内的字符

\w

匹配文字和数字字符,也就是[A-Za-z0-9]

x\{m,\}

重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
'\w\{3,\}'即是至少有4个字符的已登录用户

$

锚定行的结束 如:/sed$/匹配所有以sed结尾的行。


awk
关于awk:

awk是一种用于处理文本的编程语言工具。AWK 实用工具的语言在很多方面类似于 shell 编程语言,尽管 AWK 具有完全属于其本身的语法。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定 内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
awk命令的语法

awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号 ({}) 不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
$0,关于awk的字段

实用工具将每个输入行分为记录和字段。记录是单行的输入,而每条记录包含若干字段。默认的字段分隔符是空格或制表符,而记录的分隔符是换行。虽然在默认情况下将制表符和空格都看作字段分隔符(多个空格仍然作为一个分隔符),但是可以将分隔符从空格改为任何其它字符。

当 AWK 读取输入内容时,整条记录被分配给变量 $0。每个字段以字段分隔符分开,被分配给变量 $1、$2、$3 等等。一行在本质上可以包含无数个字段,通过字段号来访问每个字段。
BEGIN和END

在awk 中两个特别的表达式,BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些 扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此, 通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。
gsub(r,s,t)

在字符串t中用字符串s和正则表达式r匹配的所有字符串。返回值是替换的个数。如果没有给出t,默认是$0。

NR

表示awk开始执行程序后所读取的数据行数.

$0

表示当前处理的整行数据


Linux的cut命令
关于cut命令:

cut命令可以从一个文本文件或者文本流中提取文本列,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。

cut -d'分隔字元' -f fields

参数∶
-d ∶后面接分隔字元。与 -f 一起使用;
-f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思;
-c ∶以字元 (characters) 的单位取出固定字元区间;


Linux的wc命令
关于WC命令:

该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。

该命令各选项含义如下:

wc -m filename:显示一个文件的字符数
wc -l filename:显示一个文件的行数
wc -L filename:显示一个文件中的最长行的长度
wc -w filename:显示一个文件的字数


关于ls命令

ls 命令经常要使用,通过使用 ls 命令可以查看linux文件夹包含的文件,查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在平常的linux操作中使用很频繁,所以这里介绍下 ls 命令的相关使用方法。

选项说明:

-a 用于显示所有文件和子目录(保罗点文件)。
-l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。
-r 将目录的内容清单以英文字母顺序的逆序显示。
-t 按文件修改时间进行排序,而不是按文件名进行排序。


关于sort命令

Sort命令的功能是对文件中的各行进行排序。Sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,Sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
-n按照数字方式排序。不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。

-r 颠倒指定排序的顺序。
-k作用是根据某个列来排序,默认是第1列(从1开始)。
-t表示分割符,以:分割,默认情况下以空格分割
-nrk 5即是按照数字方式倒序排序,根据文件属性的第5列即是文件大小排序


关于tr命令

通过使用 tr,可以非常容易地实现 sed 的许多最基本功能。可以将 tr 看作为 sed 的(极其)简化的变体。使用tr命令可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。

tr的命令格式为:

tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file

-c

用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。

-d

删除字符串1中所有输入字符。

-s

删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

string1_to_translate_from

要转换的原字符串

string2_to_translate_to

想要转换成的字符串


关于mv命令

mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令等同于DOS系统下的ren和move命令的组合。它的使用权限是所有用户。

mv [options] 源文件或目录 目标文件或目录。