LINUX 下 find grep sed awk 的常见基本用法特点

LINUX 下 find grep sed awk 的常见基本用法特点

只为让自己具有更高的水准,这就开始了长达6个月的小白进阶路!

这几天学习linux基础命令有点犯蒙,尤其是对文件查找这块。所有我想把一些我觉得常用的实用的参数项总结下来,大神勿喷哈。。。

不到之处请大家指教,小女子在此谢过了。

一、find:命令用于查找文件系统中指定的文件,其命令格式为:

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

(1)find 命令的参数:

pathname:find命令所查找的目录路径。

-print:find命令将匹配的文件输出到标准输出。

-exec:find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为‘command’{};,注意{ }和 ; 之间的空格。

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

(2)查找规则:

-perm  #按照权限查找

-name   #按照文件名来查找(-name支持通配符或者’’)

-user   #按照文件属主来查看文件

-group  #按照文件的所属组来查看文件

-exec   #查找后执行命令的时候不询问用户,直接执行

-type   #根据文件类型查找文件(普通文件-f;目录文件-d;链接文件-l;块设备文件-b;字符设备文件-c;管道文件-p;socket文件-s)

eg.

find . -name 1.txt  #在当前目录以及子目录下查找1.txt

find . -name “1.*”

find /tmp -name 1.txt  #在/tmp目录下查找1.txt

find /tmp -type s

find /bin/ -perm 4755 | xargs ls -al  (xargs 用来把前一个命令的输出结果转换为后一个命令的参数)

find /bin/ -exec 4755 | xargs ls -l {} \

二、grep:能使用正则表达式匹配文本,并把匹配的行打印

-c #只输出匹配行的次数

-r #查询目录及其子目录

-i #不区分大小写(只适用于单个字符)

-n #显示匹配出的载文件中是第几行

-v #显示不包含匹配文本的所有行

-n #显示匹配出的载文件中是第几行

--color=auto #找到的关键字加上颜色显示

-A #显示匹配行以及下面3行     grep -A 3 root /etc/passwd

-B #显示匹配行以及上面3行     grep -B 3 root /etc/passwd

-C #显示匹配行以及上下各3行  grep -C 3 root /etc/passwd

grep 查找的字符串 文件

grep -r 查找的字符串 目录

(1)将/etc/passwd,高亮将出现 root 的行取出来,同时显示这些行在/etc/passwd的行号

# grep -n root /etc/passwd

(2)根据文件内容递归查找目录

# grep ‘ettercap’ *    #在当前目录搜索带‘ettercap’行的文件

# grep -r ‘ettercap’ *    ##在当前目录及其子目录下搜索‘energywise‘行的文件

# grep -l -r ‘ettercap’ *     #在当前目录及其子目录下搜索‘ettercap‘行的文件,但是不显示匹配的行,只显示匹配的文件

(3)字符类的反向选择 [^]:如果想要搜索到有 cc 的行,但不想要 oo 前面有 g,如下grep -n‘[^a-z]oo‘  2.txt

(4)  grep -r cams /root/

(5)搜索以root开头的文件   ps aus | grep vi --color

(6)获取有数字的一行,如下grep -n‘[0-9]’ 2.txt

(7)找出空白行grep -n  ‘^$’  2.txt

三、sed:主要以行为单位进行处理,将数据增删改查选取等。。。

sed 参数[ -nefr ] 动作[ function ] 文件

1、选项与参数:

-n :使用安静模式。在一般sed用法中,所有来自STDIN的数据一般都会被列出到终端上。但是如果加上-n 参数后吗,则是只有sed特殊处理的那一行(或动作)才会被列出来。

-e :直接在指令模式上云行,sed动作的编辑;

-f :直接将sed的动作写在一个文件内,- f filename 则可以运行 filename 内的sed动作;

-r :sed的动作支持的是延伸正规表达发的语法。(默认是基础正则表示法语法);

-i :直接修改读取的文件内容,而不是输出到终端。

2、动作说明:[ n1[ ,n2 ] ] function

n1,n2 :不见得hi存在,一般代表【选择进行动作的行数】,举例来说,如果我的动作是需要在10到20行之间进行的,则【10,20[ function ]】

function:

a :新增,新增的内容在目前的下一行出现(目前的下一行);

c  : 取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行

d :删除,d的后面通常不接任何东西;

i : 插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

p :列印,即将某个选择的数据印出。通常p会与参数 sed -n 一起运行

s :取代,通常此动作可以搭配正则表达式

eg.

1)以行为单位的新增/删除     nl /etc/passwd | sed ‘2,5d‘

2)直要删除第二行     nl /etc/passwd | sed ‘2d‘

3)要删除第3到最后一行     nl /etc/passed | sed ‘3,$d‘

4)在第二行后(亦即是加在第三行)加上【drink tea】字样     nl /etc/passwd | sed ‘2a drink tea‘

5)新增两行以上的内容【drink tea......】与【drink beer?】     nl /etc/passwd | sed ‘2a drink tea......\>drink beer?‘

6)多点编辑,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e ‘3,$d‘ -e ‘s/bash/blueshell/‘

四、awk:简单来说,awk就是把文件逐行的读入,以空格为默认分隔符(-F)将每行切片,切开的部分在进行各种分析处理。

首先是让我迷惑很久的-F 分隔符的用法,其实就是类似于cat之类的操作:

例如操作data的文件:

zhc-123|zhang

hongchangfirst-99|zhang

hongchang-100|zhang

如果我们 awk -F ‘-‘ ‘{print $1;}‘ data,会打印出

zhc

hongzhangfirst

hongzhang

分隔符默认是空格,

变量名    含义

ARGC   命令行变元个数

ARGV   命令行变元数组

FILENAME   当前输入文件名

FNR   当前文件中的记录号

FS   输入域分隔符,默认为一个空格

RS   输入记录分隔符

NF   当前记录里域个数

NR   到目前为止记录数

OFS   输出域分隔符

ORS   输出记录分隔符

eg.last -n 5(仅取出前五行)

last -n 5 | awk ‘{print $1}‘  仅显示最近登录的5个帐号

$0 表示所有域  $1表示第一个域  $n表示地n个域

(1)命令行方式--(重点介绍)  awk [-F field-separator] ‘commands‘ input-file(s)

其中,commands是真正awk命令,[-F 域分隔符]是可选的。input-file(s)是待处理的文件

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域 。通常,在不指明-F 域分隔符的情况下,默认的域分隔符是空格。

(2)shell脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk明了解释器作为脚本的首行,一般通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/bash====>#!/bin/awk

(3)将所有的swk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)

时间: 2024-10-12 10:57:52

LINUX 下 find grep sed awk 的常见基本用法特点的相关文章

linux初学之grep   sed   awk 正则表达基本例子

. 表示任意一个 (数字,#,空格,特殊符号,字母) *表示0个或多个*号前面的字符 +表示一个或多个+前面的字符 ?表示一个或零个前面的字符 .*表示任意一个任意字符(贪婪的匹配方法) ?,+,(),|,{},[]需要脱意 参数: -c  一用有多少行 -An n为数字,这一行以及下面(After)n行打印出来 -Bn n为数字,这一行以及上面n(Bfore)行打印出来 -Cn n为数字,上下n行打印出来 [[email protected] ~]#grep -n 'root' 1.txt 打

Linux命令之grep/sed/awk等行转列

行转列样例文件如下 cat file.txt a b c d e f g h i cat file.txt |xargs -n1 xargs -n 1 < file.txt tr " " "\n" < file.txt 4.sed 's/ /\n/g' file.txt   此命令在Linux上执行正常,在Mac上执行无效,原因是因为Mac上的sed是BSD版本,Linux上的是Gnu版本,在Mac上需要使用sed -e 's/ /\'$'\n/g' f

Linux的文本编辑diff & sed & awk & grep

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大    主要参数 []    -c : 只输出匹配的行    -I : 不区分大小写    -h : 查询多文件时不显示文件名    -l : 查询多文件时, 只输出包含匹配字符的文件名    -n : 显示匹配的行号及行    -v : 显示不包含匹配文本的所有行(我经常用除去grep本身)    基本工作方式: grep 要匹配的内容 文件名, 例如:    grep 'test' d* 显示所有以d开头的文件中包含test的

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

grep,sed,awk与简单正则表达式应用

grep,sed,awk与简单正则表达式应用 这里使用的测试文件是linux /etc/passwd文件,最好是复制一份进行练习,方式对文件内容造成损坏.感觉还是要多练习才能很好的使用,习题这里就不贴了,网上一找一大把. grep:   -o 用作计算出现多少次字段  -c 打印符合要求的行数  -n 在输出符合要求的行的同时也打印行号  -v 打印不符合要求的行  -A 后跟一个数字 ps -A2表示打印符合要求的行及下面两行  -B 后跟一个数字 ps -B2表示打印符合要求的行及上面两行 

windows下类似Linux下的grep命令

今天要查看windws下代理服务器有哪些IP连接过来,但使用 netstat -na 后出现很多连接会话,不方便查看. 想到Linux下的grep非常方便,于是网络上搜寻,还是有类似的命令findstr,改为 netstat -na | findstr 3128 方便很多.

[CentOS 7系列]grep/sed/awk实战

最近准备和CoreSite - Any2 California接入商建立网络BGP邻居关系.从peeringdb (https://www.peeringdb.com/ix/142)上找到了所有接入商的信息,但是转移信息到本地不是很方便,需要进行多次文本调整,耗时较长.作为萌新,立马就想到近期学习的grep/sed/awk工具.于是就尝试处理数据. 1.下载页面内容 curl https://www.peeringdb.com/ix/142 > peering 将页面内容存入peering文件

linux 下的 正则表达式(awk,sed,awk)学习

一.正则表达式: 正则表达式(或称Regular Expression,简称RE)就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式. 该模式描述在查找文字主体时待匹配的一个或多个字符串. 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.简单的说,正则表示式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 正则表示式通过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/删除/取代某特定字符串的处理程序.vim.grep.find.awk.se

十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ / grep,sed,awk 都能解释正则表达式 正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法.^ 以什么开头 grep '^root' /etc/passwd$ 以什么结尾 如能登入系统的所有用 grep 'bash$'/etc/passwd. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的.* 所有字符* 代表前面的字符有0个或者无穷个 grep 'b*' /+ 必须用egrep 或 egrep -E 'ab+'表示前面的字符