紫悦博客

不进则退,退一步万丈悬崖!

0%

Linux文件查找命令find,xargs

Linux文件查找命令find,xargs


find命令的格式:

1
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命令的语法

1
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是以每一行为一个处理对象的,这种机制和sed是一样的。

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

参数∶

-d ∶后面接分隔字元。与 -f 一起使用;

-f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思;

-c ∶以字元 (characters) 的单位取出固定字元区间;

关于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的命令格式为:

1
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

想要转换成的字符串

除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。

本文链接:http://www.itzhai.com/linux-sed-awk-grep-cut-find-frequently-used-commands-such-as-introduction.html