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)

 

你可能感兴趣的:(linux基础操作)