Linux命令之 —— grep ls ll sed bg fg ipset wc ifconfig awk

时间:2024-05-23 18:33:08

0. grep命令

1. Linux ls  -ld 1

2. Linux 中ls -l // ll 命令详解  (7个字段):文件属性 1

3. shell中的if判断

4. Linux中 >和>>的区别   []和[[]]的区别 3

5. sed的使用参数 (shell的用途)

6. bg或者fg

7. ipset命令

8. wc - 命令

9. ifconfig命令

10. awk 命令

   

0.grep命令    

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.命令格式:

grep [option] pattern file

2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

3.命令参数:

-a   --text   #不要忽略二进制的数据。   

-A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。   

-b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。   

-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。   

-c    --count   #计算符合样式的列数。   

-C<显示行数>    --context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。   

-d <动作>      --directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。   

-e<范本样式>  --regexp=<范本样式>   #指定字符串做为查找文件内容的样式。   

-E      --extended-regexp   #将样式为延伸的普通表示法来使用。   

-f<规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。   

-F   --fixed-regexp   #将样式视为固定字符串的列表。   

-G   --basic-regexp   #将样式视为普通的表示法来使用。   

-h   --no-filename   #在显示符合样式的那一行之前,不标示该行所属的文件名称。   

-H   --with-filename   #在显示符合样式的那一行之前,表示该行所属的文件名称。   

-i    --ignore-case   #忽略字符大小写的差别。   

-l    --file-with-matches   #列出文件内容符合指定的样式的文件名称。   

-L   --files-without-match   #列出文件内容不符合指定的样式的文件名称。   

-n   --line-number   #在显示符合样式的那一行之前,标示出该行的列数编号。   

-q   --quiet或--silent   #不显示任何信息。   

-r   --recursive   #此参数的效果和指定“-d recurse”参数相同。   

-s   --no-messages   #不显示错误信息。   

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

-V   --version   #显示版本信息。   

-w   --word-regexp   #只显示全字符合的列。   

-x    --line-regexp   #只显示全列符合的列。   

-y   #此参数的效果和指定“-i”参数相同。

  

4.规则表达式:

grep的规则表达式:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。    

$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。    

.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    

*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    

.*   #一起用代表任意字符。   

[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    

[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    

\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。    

\<      #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。    

\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    

x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    

x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    

x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   

\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   

\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。   

\b    #单词锁定符,如: '\bgrep\b'只匹配grep。  

POSIX字符:

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]    #文字数字字符   

[:alpha:]    #文字字符   

[:digit:]    #数字字符   

[:graph:]    #非空字符(非空格、控制字符)   

[:lower:]    #小写字符   

[:cntrl:]    #控制字符   

[:print:]    #非空字符(包括空格)   

[:punct:]    #标点符号   

[:space:]    #所有空白字符(新行,空格,制表符)   

[:upper:]    #大写字符   

[:xdigit:]   #十六进制数字(0-9,a-f,A-F)  

5.使用实例:

实例1:查找指定进程

命令:

ps -ef|grep svn

输出:

[[email protected] ~]# ps -ef|grep svn

root 4943   1      0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/

root 16867 16838  0 19:53 pts/0    00:00:00 grep svn

[[email protected] ~]#

说明:

第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

实例2:查找指定进程个数

命令:

ps -ef|grep svn -c

ps -ef|grep -c svn

输出:

[[email protected] ~]# ps -ef|grep svn -c

2

[[email protected] ~]# ps -ef|grep -c svn 

2

[[email protected] ~]#

说明:

实例3:从文件中读取关键词进行搜索

命令:

cat test.txt | grep -f test2.txt

输出:

[[email protected] test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[[email protected] test]# cat test2.txt 

linux

Redhat

[[email protected] test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

[[email protected] test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行

实例3:从文件中读取关键词进行搜索 且显示行号

命令:

cat test.txt | grep -nf test2.txt

输出:

[[email protected] test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[[email protected] test]# cat test2.txt 

linux

Redhat

[[email protected] test]# cat test.txt | grep -nf test2.txt

1:hnlinux

4:ubuntu linux

6:Redhat

7:linuxmint

[[email protected] test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号

实例5:从文件中查找关键词

命令:

grep 'linux' test.txt

输出:

[[email protected] test]# grep 'linux' test.txt 

hnlinux

ubuntu linux

linuxmint

[[email protected] test]# grep -n 'linux' test.txt 

1:hnlinux

4:ubuntu linux

7:linuxmint

[[email protected] test]#

说明:

实例6:从多个文件中查找关键词

命令:

grep 'linux' test.txt test2.txt

输出:

[[email protected] test]# grep -n 'linux' test.txt test2.txt 

test.txt:1:hnlinux

test.txt:4:ubuntu linux

test.txt:7:linuxmint

test2.txt:1:linux

[[email protected] test]# grep 'linux' test.txt test2.txt 

test.txt:hnlinux

test.txt:ubuntu linux

test.txt:linuxmint

test2.txt:linux

[[email protected] test]#

说明:

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上":"作为标示符

实例7:grep不显示本身进程

命令:

ps aux|grep \[s]sh

ps aux | grep ssh | grep -v "grep"

输出:

[[email protected] test]# ps aux|grep ssh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: [email protected]/0 

root  16901  0.0  0.0  61180   764 pts/0  S+   20:31   0:00 grep ssh

[[email protected] test]# ps aux|grep \[s]sh]

[[email protected] test]# ps aux|grep \[s]sh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: [email protected]/0 

[[email protected] test]# ps aux | grep ssh | grep -v "grep"

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: [email protected]/0

说明:

实例8:找出已u开头的行内容

命令:

cat test.txt |grep ^u

输出:

[[email protected] test]# cat test.txt |grep ^u

ubuntu

ubuntu linux

[[email protected] test]#

说明:

实例9:输出非u开头的行内容

命令:

cat test.txt |grep ^[^u]

输出:

[[email protected] test]# cat test.txt |grep ^[^u]

hnlinux

peida.cnblogs.com

redhat

Redhat

linuxmint

[[email protected] test]#

说明:

实例10:输出以hat结尾的行内容

命令:

cat test.txt |grep hat$

输出:

[[email protected] test]# cat test.txt |grep hat$

redhat

Redhat

[[email protected] test]#

说明:

实例11:输出ip地址

命令:

     ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

输出:

[[email protected] test]# ifconfig eth0|grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[[email protected] test]# ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[[email protected] test]#

说明:

实例12:显示包含ed或者at字符的内容行

命令:

cat test.txt |grep -E "ed|at"

输出:

[[email protected] test]# cat test.txt |grep -E "peida|com"

peida.cnblogs.com

[[email protected] test]# cat test.txt |grep -E "ed|at"

redhat

Redhat

[[email protected] test]#

说明:

实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

命令:

grep '[a-z]\{7\}' *.txt

输出:

[[email protected] test]# grep '[a-z]\{7\}' *.txt

test.txt:hnlinux

test.txt:peida.cnblogs.com

test.txt:linuxmint

[[email protected] test]#

 

实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的

命令:

grep '.' access1.log|grep -Ev '404' > access2.log

grep '.' access1.log|grep -Ev '(404|/photo/|/css/)' > access2.log

grep '.' access1.log|grep -E '404' > access2.log

输出:

[[email protected] test]# grep “.”access1.log|grep -Ev “404” > access2.log

说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log

1.Linux ls  -ld

ls 列出文件以及目录

-l 以详细的格式列表

-d 仅列目录

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

只是查看当前目录的详细信息,只是目录,不包括目录下的子目录和文件。

 

ls -ld  目录名/文件名

只是查看此目录/文件的详细信息,只是目录,不包括目录下的子目录和文件。

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

 ls -ld 目录名/文件名 | awk ‘{print  int($5)}’

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

 2. Linux ls -l // ll 命令详解  (7个字段):文件属性

http://blog.****.net/sjzs5590/article/details/8254527

-rw-r--r-- 1 root root   116 Feb  8 13:47 ZhiZhen.c

 

“-”表示普通文件 touch

“d”表示目录 mkdir

“l”表示链接

“b“表示块设备文件(block)

“c”表示字符设备文件(character)

“p”表示文件为命令管道文件

“s”为socket文件

 

  前三个rwx表示:*文件拥有者权限

  中间三个表示:$所属组拥有者权限

  最后三个表示:#其他用户用于的权限

 

 如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数

 所有人添加s权限,用户lee使用/bin/touch创建file所有人为root

 文件/目录的拥有者

文件/目录拥有者所在的组

文件所占用的的空间(以字节为单位)

文件/目录最近访问/修改的时间

文件名

3.shell中的if判断

shell中的if与c语言if上的区别

shell if

c语言中的if

0为真,走then

正好相反,非0走then

不支持整数变量直接if

必须:if [ i –ne 0 ]但支持字符串变量直接if

if [ str ] 如果字符串非0

支持变量直接if

if (i )

 

文件表达式

整数变量表达式

字符串变量表达式

if [ -f  file ]    如果文件存在

if [ -d ...   ]    如果目录存在

if [ -s file  ]    如果文件存在且非空 

if [ -r file  ]    如果文件存在且可读

if [ -w file  ]    如果文件存在且可写

if [ -x file  ]    如果文件存在且可执行

if [ int1 -eq int2 ]    如果int1等于int2   

if [ int1 -ne int2 ]    如果不等于    

if [ int1 -ge int2 ]       如果>=

if [ int1 -gt int2 ]       如果>

if [ int1 -le int2 ]       如果<=

if [ int1 -lt int2 ]       如果<

If  [ $a = $b ]                 如果string1等于string2

                                字符串允许使用赋值号做等号

if  [ $string1 !=  $string2 ]   如果string1不等于string2       

if  [ -n $string  ]             如果string 非空(非0),返回0(true)  

if  [ -z $string  ]             如果string 为空

if  [ $sting ]                  如果string 非空,返回0 (和-n类似)    

-s file     文件大小非0时为真

[ -f "somefile" ] :判断是否是一个文件

 

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

 

[ -n "$var" ] :判断$var变量是否有值

 

[ "$a" = "$b" ] :判断$a和$b是否相等       

-r file     用户可读为真

-w file     用户可写为真

-x file     用户可执行为真

-f file     文件为正规文件为真

-d file     文件为目录为真

-c file     文件为字符特殊文件为真

-b file     文件为块特殊文件为真

-s file     文件大小非0时为真

-t file     当文件描述符(默认为1)指定的设备为终端时为真

 

if [ -s  "audit" ];then

…………one…………

if [  ! -s  audit.bak ];then

…………two…………

else

…………three…………

fi

…………four…………

fi

…………five…………     '

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk  

shell中的 if...fi 语句的基本控制语句,它允许Shell有条件作出决定并执行语句。

语法

if [ expression ]then Statement(s) to be executed if expression is truefi

Shell expression求值。如果结果值是true,给定statement被执行。如果 expression 为false ,则没有语句将不会被执行。大部分的时候,会使用比较操作符决策。

关注对括号和表达之间的空间。这个空间是强制性的,否则语法错误。

如果expression 是一个shell命令,那么它会被假定如此,如果它执行后返回0。如果它是一个布尔表达式,那么返回true。

例子:

#!/bin/sha=10b=20if [ $a == $b ]then echo "a is equal to b"fiif [ $a != $b ]then echo "a is not equal to b"fi

这将产生以下结果:

a is not equal to b

shell判断文件有多少行

https://zhidao.baidu.com/question/922495731716454579.html

# awk '{print NR}' a.txt | tail -n1

1、^代表行首

2、$代表行尾

3、所有行首增加sed -i 's/^/ABC/' a.txt

4、所有行尾添加sed -i 's/$/XYZ/' a.txt

5、删除首行sed -i '1d' d.txt

6、删除末行sed -i '$d' d.txt

7、第5行添加sed -i '5 r 5.txt' a.txt

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

8、shell判断文件有多少行

https://zhidao.baidu.com/question/922495731716454579.html

# awk '{print NR}' a.txt | tail -n1

9、剔除空格sed -i 's/[ ]*//g' ~/vip1.txt

10、删除回车符sed -i 's/^M//g' a.txt

11、从fromstart这行下面添加内容sed -i '/fromstart/r 4.txt' 5.txt

12、第一列排序存文件awk '{print $1}' vip1.txt |sort -n > vip2.txt //把 vip1.txt文件中的内容排序按照第一列排序 覆盖给 vip2.txt

13、取出文件中的某一列 # awk '{print $1}' aa.txt

14、shell删除文件中的所有空行

# sed -i '/^$/d' a.txt

shell截取字符串的方法

http://www.cnblogs.com/xwdreamer/p/3823463.html

4.Linux>>>的区别   [][[]]的区别

>(重定向到一个地方)直接把内容生成到指定文件,会覆盖员文件中的内容,还有一种用途是直接生成一个空白文件,相当于touch命令

>>(追加到一个地方)尾部追加,不会覆盖掉文件中原有的内容

 

双括号中的表达式可以看作是一个单的的语句,并返回其退出状态码:

而逻辑与(and)和逻辑或(or)在 [ 和 [[ 中的用法也不同:

[ 中使用 -a 和 -o 参数连接不同的条件,[[ 中使用 && 和 ||。

 Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

5. sed的使用参数

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html

http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html

常用选项:

        -n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来

        -e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑

        -f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作

        -r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)

        -i∶直接修改读取的文件内容,而不是由屏幕输出      

常用命令:

        a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

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

        d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容

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

         p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用

         s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g

 特殊字符意义:

、使用句点匹配单字符    句点“.”可以匹配任意单字符。“.”可以匹配字符串头,也可以是中间任意字符。假定正在过滤一个文本文件,对于一个有1 0个字符的脚本集,要求前4个字符之后为X C,匹配操作如下:. . . .X C. . . .

在行首以^匹配字符串或字符序列    ^只允许在一行的开始匹配字符或单词。在行首第4个字符为1,匹配操作表示为:^ . . . 1

在行尾以$匹配字符串或字符    可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。如果在行尾匹配单词j e t 0 1,操作如下:j e t 0 1 $    如果只返回包含一个字符的行,操作如下:^ . $

使用*匹配字符串中的单字符或其重复序列    使用此特殊字符匹配任意字符或字符串的重复多次表达式。

使用/屏蔽一个特殊字符的含义    有时需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。如果要在正则表达式中匹配以* . p a s结尾的所有文件,可做如下操作:/ * / . p a s

使用[]匹配一个范围或集合     使用[ ]匹配特定字符串或字符串集,可以用逗号将括弧内要匹配的不同字符串分开,但并不强制要求这样做(一些系统提倡在复杂的表达式中使用逗号),这样做可以增 加模式的可读性。使用“ -”表示一个字符串范围,表明字符串范围从“ -”左边字符开始,到“ -”右边字符结束。假定要匹配任意一个数字,可以使用:[ 0 1 2 3 4 5 6 7 8 9 ]    要匹配任意字母,则使用:[ A - Z a - z ]表明从A - Z、a - z的字母范围。

使用/{/}匹配模式结果出现的次数    使用*可匹配所有匹配结果任意次,但如果只要指定次数,就应使用/ { / },此模式有三种形式,即:

    pattern/{n/} 匹配模式出现n次。

    pattern/{n,/} 匹配模式出现最少n次。

    pattern/{n,m} 匹配模式出现n到m次之间,n , m为0 - 2 5 5中任意整数。

    匹配字母A出现两次,并以B结尾,操作如下:A / { 2 / } B匹配值为A A B    匹配A至少4次,使用:A / { 4 , / } B

sed的工作方式:

实用工具按顺序逐行将文件读入到内存中。然后,它执行为该行指定的所有操作,并在完成请求的修改之后将该行放回到内存中,以将其转储至终端。完成了这一行 上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件。

如同前面所提到的,默认输出是将每一行的内容输出到屏幕上。在这里,开始涉及到 两个重要的因素—首先,输出可以被重定向到另一文件中,以保存变化;第二,源文件(默认地)保持不被修改。sed 默认读取整个文件并对其中的每一行进行修改。不过,可以按需要将操作限制在指定的行上。

实用工具:sed [options] '{command}' [filename]

1shell将一个值替换为另一个值: 's/{old value}/{new value}/'

例如:(全局修改)将tiger改为worf   after改为before

$ echo The tiger cubs will meet on Tuesday after school |sed -e 's/tiger/wolf/' -e 's/after/before/'

$ echo The tiger cubs will meet on Tuesday after school | sed 's/tiger/wolf/;s/after/before/'

$ echo The tiger cubs will meet on Tuesday after school | sed '

> s/tiger/wolf/

> s/after/before/'

sed  -i "s/after/before/"  文件名

例如:(局部修改)

$ cat sample_one

one 1

two 1

three 1

one 1

two 1

two 1

three 1

假定希望用 "2" 来替换 "1",但仅在单词 "two" 之后才作替换,而不是每一行的所有位置。通过指定在给出替换命令之前必须存在一次匹配,可以实现这一点:

 $ sed '/two/s/1/2/' sample_one

one 1

two 2

three 1

one 1

two 2

two 2

three 1

$

 2shell删除第一行、最后一行或者增加删除某行{^表示开始 $表示结束 }

 删除某行

     [[email protected] ruby] # sed '1d' ab              #删除第一行 

     [[email protected] ruby] # sed '$d' ab              #删除最后一行

     [[email protected] ruby] # sed '1,2d' ab           #删除第一行到第二行

     [[email protected] ruby] # sed '2,$d' ab           #删除第二行到最后一行

sed -i '/^QWQ/d' <file> 删除文件中包含某个关键字开头的所有行

sed -i '/QWQ/d' <file> 删除文件中包含某个关键字的所有行

sed -i '/ntpdate/s/^#//' /etc/crontab 删除文中ntpdete所在行 开头#给删除

 

inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 前面的部分予以删除

[[email protected] ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

接下来则是删除后续的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

将 IP 后面的部分予以删除

[[email protected] ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'192.168.1.100

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

显示某行

.    [[email protected] ruby] # sed -n '1p' ab           #显示第一行 

     [[email protected] ruby] # sed -n '$p' ab           #显示最后一行

     [[email protected] ruby] # sed -n '1,2p' ab        #显示第一行到第二行

     [[email protected] ruby] # sed -n '2,$p' ab        #显示第二行到最后一行

使用模式进行查询

     [[email protected] ruby] # sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行

     [[email protected] ruby] # sed -n '/\$/p' ab        #查询包括关键字$所在所有行,使用反斜线\屏蔽特

增加一行或多行字符串

     [[email protected] ruby]# cat ab

     Hello!

     ruby is me,welcome to my blog.

     end

     [[email protected] ruby] # sed '1a drink tea' ab  #第一行后增加字符串"drink tea"

     Hello!

     drink tea

     ruby is me,welcome to my blog. 

     end

     [[email protected] ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"

     Hello!

     drink tea

     ruby is me,welcome to my blog.

     drink tea

     end

     drink tea

     [[email protected] ruby] # sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n

     Hello!

     drink tea

     or coffee

     ruby is me,welcome to my blog.

     end

[[email protected] ruby] # awk '{print}{print "ccc"}' ab  #在文档中的每一行后边都加一行相同的数据

     Hello!

ccc

     ruby is me,welcome to my blog.

     ccc

end

ccc

代替一行或多行

     [[email protected] ruby] # sed '1c Hi' ab                #第一行代替为Hi

     Hi

     ruby is me,welcome to my blog.

     end

     [[email protected] ruby] # sed '1,2c Hi' ab             #第一行到第二行代替为Hi

     Hi

     end

替换一行中的某部分

  格式:sed 's/要替换的字符串/新的字符串/g'   (要替换的字符串可以用正则表达式)

     [[email protected] ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird

   [[email protected] ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g'        #删除ruby

插入

     [[email protected] ruby] # sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"

     [[email protected] ruby]# cat ab

     Hello!

     ruby is me,welcome to my blog.

     end

     bye

[[email protected] ruby] # sed -i '1i\enen' ab         #在文件ab中最后一行直接输入"bye"

     [[email protected] ruby]# cat ab

     enen

Hello!

     ruby is me,welcome to my blog.

     end

3shell中的空格/空行

<1>、查看某文件时忽略空格(但是源文件中的空格还在,只是说在终端打印出来的文件是没有的)

^ : 开始

$ :结尾

^$ :表示空行

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

<2>、shell echo打印换行的方法

# echo -e "nihao \n jie" (注意\n前后要有空格)

<3>、shell删除文件中的所有空行

# sed -i '/^$/d' a.txt

<4>、查看的时候在每一行的后边都打印一行空格

# awk '{print}{print "\n"}' a.txt

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

4》shell判断文件是否存在

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

5》shell判断文件夹是否存在

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

5》shell文件的追加

文件a.txt 中的内容

aaaa

AAAA

文件b.txt中的内容

bbbb

BBBB

把a.txt中的文件追加到b.txt的文件开始

aaaa

AAAA

bbbb

BBBB

<1>、if[ !-f "c.txt" ];then //循环

touch c.txt

else

cat b.txt > c.txt

cat a.txt > b.txt

sed -i ‘$d’ b.txt //去掉b.txt的最后一行

cat c.txt >> b.txt

rm -rf c.txt

fi

<2>、cat a.txt b.txt > c.txt //会直接把a.txt的全部内容 直接复制到b.txt的前面

cat c.txt > b.txt //用c.txt的内容直接覆盖掉b.txt的内容

6.bg或者fg

1》当你编辑一个文件时候:# vi xiaoming.c

2》但是不小心按了ctrl+z 退出来了

3》输入  #bg

4》输入 # fg %1

其就会自动执行 编辑功能 vi

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

7.ipset命令

https://wenku.baidu.com/view/13bcdf2953ea551810a6f524ccbff121dd36c59b.html

https://wenku.baidu.com/view/c55ab62a14791711cc791781.html

参数

函数用法

函数功能

示例:

-N

-创建 集合名称 类型 类型具体选项

创建一个用集合名称命名并且指定类型的集合。类型具体想必须是系统指定。内核版本低于2.6时系统指定为iptreemap。

# ipset -N jie hash:ip

-A

-添加 集合名称 IP

往集合中添加一个ip。

# ipset -A jie 2.2.2.2

-L

-列出 [集合名名称]

列出指定集合的规则和绑定,如果没有指定或者指定为all就列出所有的集合。

 

-X

-删除 [集合名称]

删除指定的集合,如果没有指定或者指定all就删除全部的集合。如果集合的绑定和默认绑定,如果集合被使用,则什么都不做。

# ipset -X jie

-F

-清空 [集合名称]

删除指定集合中的所有规则。绑定不会受到清空操作的影响。

# ipset -F (删除所有集合名称里面的number)

# ipset -F jie(删除jie集合中的number)

-E

-重命名 旧集合名 新集合名

重命名集合,新集合名的标识必须是目前不存在的。

 

-W

-交换 源集合名 目的集合名

交换两个集合的内容,或者说交换两个集合的名称。两个集合存在且具有相同的类型。

 

-S

-保存 [集合名称]

保存指定集合的名称。

 

-D

-删除 集合名称 IP

从集合中删除一个IP

# ipset -D jie 2.2.2.2

-T

-测试 集合名称 IP

测试一个IP是不是在集合中,要是在集合中返回0,不在集合中返回非0.

# ipset -T jie 3.3.3.3

-T

-测试 集合名称 IP 绑定的目的集合

测试ip是否附属指定集合的绑定点。

 

-B

-绑定 集合名称 IP 绑定的目的集合

绑定集合里的ip和目的集合

 

-U

-解除绑定 集合名称 IP

删除集合中的指定ip的绑定

 

-H

-帮助 [帮助类型]

找出指定设置类型的帮助信息。

 

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

1>

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

1.1>

Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

1.2>Linux命令之 —— grep \ls \ ll \ sed \ bg fg \ ipset \ wc \ ifconfig \ awk

8、 linux wc命令详解

wc -c filename:显示一个文件的字节数

wc -m filename:显示一个文件的字符数

wc -l filename:显示一个文件的行数

wc -L filename:显示一个文件中的最长行的长度

wc -w filename:显示一个文件的字数

本文转自凌众科技技术文章中心 http://www.lingzhong.cn ,转载请注明出处。

Linux wc命令详解 http://www.lingzhong.cn/tech/20572.htm

9、ifconfig命令

添加网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0

/*注意需要在root权限下 才可以执行 用su切换*/

删除网卡: ifconfig eth0:1 192.168.10.25 netmask 255.255.255.0 down

/*这个是用命令删除 */

ifconfig eth0:1 down

/*这个是用别名 直接删除 网卡*/

取所有的eth开头的网卡: ifconfig -a | grep eth

/*

eth0 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

*/

根据别名,取一个网卡的所有的信息: ifconfig eth0:1

/*

eth0:1 Link encap:Ethernet HWaddr 00:0c:29:11:89:2b

inet addr:192.168.10.25 Bcast:192.168.10.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

Interrupt:19 Base address:0x2000

*/

取某一个网卡的ip部分: ifconfig eth0:1 | grep inet | awk '{print $2}'

/*

addr:192.168.10.25

*/

直接取到eth0:1网卡的ip地址: ifconfig eth0:1 | grep inet | awk '{print $2}' | awk -F: '{print $2}'

/*

192.168.10.25

*/

直接取到eth0:1网卡的网关: ifconfig eth0:1 | grep inet | awk '{print $3}' | awk -F: '{print $2}'

/*

192.168.10.255

*/

把命令写到文件中,再从文件中读出来:

char cmd_net_buf[512] = {'\0'};

snprintf(cmd_net_buf,sizeof(cmd_net_buf),"ifconfig -a | grep eth | awk '{print $1}' ")

printf(“%s\n”,cmd_net_buf);

system(cmd_net_buf);

/* 结果

eth0

eth0:1

*/

char result_buf[512] = {'\0'};

FILE *fp = NULL;

while(fgets(result_net,sizeof(result_net),fp)!=NULL) //此时获得eth0 但其最后有一个回车符

{

if(reult_net[strlen(reult_net)-1] == '\n') //删除fgets函数取到的字符串 尾部的换行符号‘\n’

reult_net[strlen(reult_net)-1] == '\0';

if(0 == strcmp(result_net,net)) //net 是前端传过来的值或者是从文件中读取出来的

{ }

}

 

10、awk命令

1》awk中使用substr命令 截取字符串

在ntp时间同步时候,需要查看/etc/crontab文件

功能:设置周期性被执行的指令

格式:minute(分钟)hour(小时) day(天)mounth (月) dayfweek(星期) program

注意:星号(*)可以用来代表所有有效的值。

井号(#)的行是注释,不会被处理。

整数间的短线(-)指定一个整数范围。例如:1-3 表示1,2,3

逗号(,)隔开的一系列值指定一个列表。例如:3, 4, 6, 8 标明这四个指定的整数

正斜线(/)可以用来指定间隔频率。/<integer> 意味着在范围内可以跳过 integer。

例如:0-59/2 分钟字段中定义每两分钟。

*/3 的值可以用在月份字段中表示每三个月运行一次任务。

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

 

*/1 * * * * root /usr/sbin/ntpdate 1.1.1.1 //自己加的

 

# m h dom mon dow user command

17 * * * * root cd / && run-parts --report /etc/cron.hourly

25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#

Ubuntu调用run-parts命令,定时运行四个目录下的所有脚本。

/etc/cron.hourly下的脚本会被每小时运行一次,在每小时的17分时运行。

/etc/cron.daily下的脚本会被每天运行一次,在每天6点25分运行。

/etc/cron.weekly下的脚本会被每周运行一次,在每周第7天的6点47分运行。

/etc/cron.monthly下的脚本会被每月运行一次,在每月1号的6点52分运行。

以上是文件的内容。

substr(字符串,开始,截取多少个)

# cat /etc/crontab | grep ntpdate | awk '{print substr($1, 1,1)}'

*

# cat /etc/crontab | grep ntpdate | awk '{print substr($1, 2,1)}'

/

# cat /etc/crontab | grep ntpdate | awk '{print substr($1, 3,1)}'

1

修改值:

# sed -i '/ntpdate/s/[0-9]\+/9/' /etc/crontab ==》》把1改成9

# sed -i '/ntpdate/s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/2.2.2.2/' /etc/crontab ==》》把1.1.1.1改2.2.2.2

# sed -i '/ntpdate/s/^/#/' /etc/crontab ==》》把*/1 前面加# */1==>>#*/1

# sed -i '/ntpdate/s/^#//' /etc/crontab ==》》把#*/1前面的#删除 # */1==>>*/ 1

 

2》awk中使用split命令 截取字符串

在awk1.c文件中,有如下所示的内容。

-rwxr-xr-x 1 root root 13304 May("17","a.out");
-rw-r--r-- 1 root root     0 May("23","awk.c");
-rw-r--r-- 1 root root    12 May("55","demo.txt");
-rw-r--r-- 1 root root   420 May("54","readDemoTxt_fgetc.c");

需要得到,其中的一些字符  

a.out     17

awk.c     23

demo.txt   55

readDemoTxt_fget.c   54

readDemoTxt_fget.c   45

实现的命令如下(解释的时候以一行为例):

    [[email protected] dd]# cat awk1.c | sed 's/"//g' | awk '{print($6)}' | awk '{split($0,a,"(");print a[2]}' | awk '{split($0,b,")");print b[1]}' | awk '{split($0,c,",");print c[2],c[1]}'

     1》对于cat awk1.c ,不做过多的解释;

        显示为:   -rwxr-xr-x 1 root root 13304 May("17","a.out");

     2》对于sed 's/"//g' ,意思是去掉文件中所有的双引号;

        显示为:   -rwxr-xr-x 1 root root 13304 May(17,a.out);

     3》对于awk '{print($6)}',是取出第6列;

        显示为:May(17,a.out);

     4》对于awk '{split($0,a,"(");print a[2]}',是以'(   '为分割点,对字符串进行截取,打印出( 后面的;

        显示为:17,a.out);

     5》对于awk '{split($0,b,")");print b[1]}',是以'   )'为分割点,对字符串进行截取,打印出 )前面的;

        显示为:17,a.out

     6》对于 awk '{split($0,c,",");print c[2],c[1]}',是以 '  ,' 为分割点,对字符串进行截取,先打印出c[2],后打印c[1];

         显示为:a.out 17

3》awk中使用split命令 截取字符串 

    字符串 VALUES('109','x11','','','yes','0');   最后显示为   x11  109

[[email protected] l7-protocols]# sed  "s/'//g" resource_app.conf | awk '{print($4)}' | awk '{split($0,a,"(");print a[2],a[1]}' | awk '{split($0,b,",");print b[2],b[1]}'

4》awk修改文件中的 某一列

    asdfgh popen.txt             《--【 文件该之前】                       asdfgh popen

    qwerty popen.c                 【文件该之后】--》                       qwerty popen
如果只是改变显示的值:
#awk '{print $1,"popen"}' popen.txt
如果要改文件中的值:#awk '{print $1,\"popen\"}' popen.txt > temp_1 && mv -f temp_1 popen.txt
         
//[[ popen引号需要转义]]  [[mv时候加-f取消 提示输入y/n]]   //[[并且要加cat命令 否则后需的fgets没有值]]
5》awk修改文件中的 第一行第一列设为1;第二行第二列设为2;……以此类推
   
a b c                          《--【 文件该之前】                          1 b c
   d e f                                                                                     d 2
   g h                            【文件该之后】--》                         g h 3  
 只是改变显示的值:# awk '{gsub($NR,NR);print $0}' awk.txt 
        //
awk sub和gsub区别及用法   //关于awk命令的几个内置变量(NF,NR,FS,FILENAME)
6》awk修改文件中的 第一行最后一列设为1;第二行最后一列设为2;……以此类推
   a b c                          《--【 文件该之前】                          a b 1
   d e f                                                                                     d e 2
   g h i                             【文件该之后】--》                         g h 3 
 只是改变显示的值:# awk  '$NF=NR'  awk.txt 
7》awk修改文件中的 第一行第一列设为hi;第二行第一列设为hello;第三行第一列设为‘你好’
   a b c                          《--【 文件该之前】                          hi b c
   d e f                                                                                     hello e 2
   g h i                             【文件该之后】--》                         你好 h 3 
 只是改变显示的值:# awk '{if(NR==1)$1="hi";else if(NR==2)$1="hello";else if(NR==3)$1="你好"}1' awk.txt  

参考的链接有:

linux下awk内置函数的使用(split/substr/length): http://www.cnblogs.com/sunada2005/p/3493941.html

使用AWK进行分割字符串以及截取字符串: https://blog.****.net/amkio/article/details/40656991

去掉文件中所有的双引号: https://zhidao.baidu.com/question/1608917480852840147.html?fr=iks&word=awk%B9%FD%C2%CB%D7%D6%B7%FB%B4%AE%D6%D0%B5%C4%B5%A5%D2%FD%BA%C5&ie=gbk