正则表达式grep,sed

HTTP

一个简单的网页文件

service iptables stop

echo “<h1>I  LOVE YOU</h1>” > /var/www/html/index.html

文本排序sort

sort 1.txt   排序规则先数字后字母,小写字母在前。

sort -t “:” -k3 /etc/passwd    用用户的UID排序,按字符大小。(等于tr -d f

sort -t “:” -k3 -n /etc/passwd   数字排序        uniq   -c    缩减重复的行并进行统计

cut -d: -f3 /etc/passwd | sort -nr > uid.txt   将用户的uid截取出来并排序(数字排序,倒序)

R 随机排序

sort -u f1                             去掉重复的行

例子:

sort -t ” ”  -k 1 access_log |cut -d ” ” -f1 |uniq -c |sort -nr     统计访问量并排序

last | sort | cut -d ” ” -f1 |uniq -c                  统计用户登陆次数

uniq 命令     选项-c   显示每行重复次数

  -d   仅显示重复过的行

  -u    仅显示不重复的行

LINUX文本处理    (grepsedawk)文本处理三剑客

grep 文本处理

例子:

df -h | grep “/dev/sd” | tr -s ” ” “%” | cut -d% -f5    过滤硬盘/dev/sd*这些设备使用率

  小技巧:nmap -v 172.168.102.0/24  扫描这个网段的活跃IP

grep -e root -e zm /etc/passwd   过滤/etc/passwd中包含rootzm的行(-e同时执行)

正则表达式

*     匹配前面字符任意次,包括0次。贪婪模式,尽可能多的或长的匹配。

.*      任意长度的任意字符

\?      匹配其前面的字符0次或者1

\+      匹配前面的字符至少一次

\{n\}    匹配前面的字符n次                   注:\取消特殊含义

\{m,n\}  匹配前面的字符至少m次,最多n

\{,n\}    匹配前面的字符最多n

\{n,\}    匹配前面的字符至少n

例子:

ifconfig这条命令中输出的所有ip过滤出来

ifconfig | grep -o “[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}”

位置锚定:定位出现的位置

^  行首锚定,用于该模式的最左侧

$  行尾锚定,用于该模式的最右侧

^PATTERN$  用于模式的匹配整行

^$ 空行

^[[:space:]]*$  空白行

\<\b词首锚定,用于单词模式的左侧

\>\b 词尾锚定,用于单词模式的右侧

\<PATTERN>\    匹配整个单词

例子:

cat /etc/fstab | grep -v “^#” | grep -v “^$”      过滤掉/fstab以#浩开头的行和空行

grep ‘^[[:space:]]\+linux16’ /boot/grub2/grub.cfg | grep -v rescue    过滤出更改网卡名的行

分组处理

分组:将一个或者多个字符绑定在一起,当作一个整体来处理:\(root\)\+

例:\(string1\+\(string2\)*\)

egrep扩展的正则表达式

字符匹配:   . 任意单个字符    [] 指定范围的字符   [^]不在范围内的字符

或者:a|b    a或者b

  C|cat   C或者cat

  (C|c)at  Cat或者cat

例子:

ifconfig | grep -oE “([0-9]{1,3}\.){3}[0-9]{1,3}”     用扩展正则表达式取ip

ls *.rpm |rev | cut -d. -f2|rev|sort |uniq -c       统计出光盘镜像中各种类型的安装包

ls *.rpm | grep -o “\.\b[0-9a-z_]*\>\.rpm” | sort |uniq -c  用正则表达式写出统计光盘

VIM

字符编辑: x:删除当前光标的字符   #xdel光标起始后的字符

   xp:交换光标所在处的字符及其后面字符的位置

   ~:转换大小写   j:删除光标当前行后的换行符

替换命令: r:替换光标所在处字符

   R:切换成replace模式

可视化模块:ctrl+v 面向块

多文件分割:vim -o|-O file1   file2

-o:水平分割

-O:垂直分割

单文件窗口分割:ctrl+w,s:split,水平分割

        ctrl+wv:  垂直分割

    Ctrl+w,q :取消相邻窗口

    ctrl+w,o:取消全部窗口

命令模式:wqall  退出

sed处理文本的工具

Sed  选项   文件

-n :不输出模式空间内容到屏幕,即不自动打印

-e :多点编辑

-f /PATH/SCRIPI_FILE:从指定文件中读取编辑脚本

-r :支持使用扩展正则表达式

-i.bak :备份文件并原处编辑

script:  地址命令      不给地址对全文处理

单地址:#:指定的行,$:最后一行 /pattern/:被模式所能匹配到的每一行

地址范围:##     从第几行到第几行

  #+#    从第几行加若干行之后

  /pat1//pat2/  从一个模式找到下一个模式

  #/pat1/     从第几行到下一个模式

~:步进

1~2奇数行

2~2偶数行

例子:

ifconfig |sed -n ‘2p’     打印出有本机ip的行

sed -n ‘/^[^#]/p’ /etc/fstab 打印出该文件中非#开头的行

sed ‘/^#/d’  f1   删除该文件中以#号开头的行

编辑命令:

d:删除模式空间中匹配的行

P:打印当前模式空间中的内容

a[\]text:在指定的行后面追加文本,支持使用\n实现多行追加

I[\]text:在行前面插入文本

C[\]text:替换行为单行或者多行文本

w/path/somefile:保持模式匹配的行到指定文件

r/path/somefile:读取指定文件的文本至模式空间中匹配到行后

=:为模式空间中的行打印行号

!:模式空间中匹配行进行取反处理

例子:

cat f1 |sed  ‘5a1234567\n7654321’  在该文件中的第五行后追加

cat f1 |sed  ‘5,10a1234567\n7654321’ 在该文件的510行后分别追加

cat f1 |sed  ‘5a\    1234567\n7654321’  在该文件的5行加空格

cat f1 |sed  ‘5\c7654321’      替换该文件的5

sed = f1 给该文件的输出打行号

cat f1 |sed ’10!d’       除了10行全部删除

sed工具:

s///:查找替换,支持使用其他分隔符,s@@@,s###

替换标记:g   行内全局替换

  P   显示替换成功的行

  w  /PATH/TO/SOMEFILE:将替换成功的行保存至文件中

例子:

sed ‘s@UUID@DSB@’ f1   将文件中的UUID替换成DSB

sed ‘s/quiet/& net.ifnames=0/’ /etc/default/grub   在文件中的quiet后面加上net.ifnames=0

sed ‘/GRUB_CMDLINE_LINUX/s/”$/  net.ifnames=0 &/’ /etc/default/grub

     在文件中以GRUB_CMDLINE_LINUX开头的行最后一个“前面加上net.ifnames=0

ifconfig | sed -n ‘2p’| sed ‘s/^.*net //’| sed ‘s/net.*//’      过滤出ip地址

 

 

 

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/92330

(1)
zhangmengzhangmeng
上一篇 2018-03-13 15:23
下一篇 2018-03-13

相关推荐

  • Linux的正则表达式grep,egrep

    Linux的正则表达式grep,egrep 一、概念 正则表达式是对字符串操作的一种逻辑公式,用事先定义好的一组特殊字符,组成一个“规则字符集合”,根据用户指定的文本模式对目标文件进行逐行搜索匹配,显示能被模式匹配到的结果。 给定一个正则表达式和另一个目标字符串,我们可以从给定的字符串中通过匹配模型,过滤字符串中不想要的的字符串,得到目标字符串,减少工作量。…

    Linux干货 2017-05-07
  • 文件通配符与命令行扩展

    * 匹配零个或多个字符 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z] 字母 [A-Z]字母          [a-Z] 会以aAbBcC…小大小大列出,特别要注意 [wang] 匹配列表中的任何的一个字符 [^wang]匹配列表中的所有字…

    2017-11-12
  • Linux运维学习历程-第六天-Linux用户、组以及权限管理

    本章内容    Linux的安全模型    用户和组    用户和组管理命令    文件权限    默认权限    特殊权限    ACL访问控制 一:3A认证       &nb…

    Linux干货 2016-08-07
  • Linux bash编程基础语法总结

    前言 在Linux学习过程中,我们无可避免的会碰到一个既让人喜欢,又令人头疼的神奇的东西——bash编程,即shell脚本。那么什么是shell脚本呢?shell是一个命令语言解释器,而shell脚本则是Linux命令的集合,按照预设的顺序依次解释执行,来完成特定的、较复杂的系统管理任务,类似于Windows中的批处理文件。本文带来的是bash编程的基础语法…

    Linux干货 2015-04-04
  • God进程监控框架

    监控重启进程的方案有很多种: 最简单的方法,写个脚本fork进程运行,然后waitpid,如果获pid后就再次启动 最土的方法,配置cron任务,固定时间运行脚本检查进程是否存在,不存在则启动 百度使用qmail里的supervised程序,通过supervised监管进程。 优点:supervised可以启动daemon程序,对于非daemon需要采用no…

    Linux干货 2015-02-13
  • kickstart 的使用!

    简介 1.什么是kickstart KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,…

    Linux干货 2016-11-03