添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

查找grep、提取awk、sed、重定向

脚本文件1、

#!/bin/bash
  for i in $(grep "辞职" publish_origin.csv | awk -F"," '{print $8}' | sed 's/pdf/txt/' |sed 's,20.*/,,');do
      echo $i
      cat xsb_top10_txt/$i
  done

脚本文件2、

   #!/bin/bash
   for i in $(grep "txt" key_para_test_set);do
       echo $i
       cat key_para_test_set/$i
   done

-e :可以换行

echo -e "1\n2\n3\n4\n6\n5" >test4

1、grep:文本搜索

grep命令_Linux grep 命令用法详解:强大的文本搜索工具

详解:

linux下grep用法 - CSDN博客 blog.csdn.net 图标 grep命令最经常使用的功能总结 - tlnshuju - 博客园 www.cnblogs.com
几个常用的文本处理shell 命令:find、grep、sort、uniq、sed、awk www.cnblogs.com

1、输出除之外的所有行 -v 选项:

grep -v "match_pattern" file_name

2、使用正则表达式 -E 选项:

grep -E "[1-9]+"
egrep "[1-9]+"

3、只输出文件中匹配到的部分 -o 选项:

echo this is a. test. | grep -o -E "[a-z]+\."
echo this is a. test. | egrep -o "[a-z]+\."

4、统计文件或者文本中包含匹配字符串的行数 -c 选项:

grep -c "text" file_name
grep -c "离职" publish_origin.csv
输出结果:1080

5、输出包含匹配字符串的行数 -n 选项:

grep "text" -n file_name
cat file_name | grep "text" -n

例如:

cat publish_origin.csv | grep "离职" -n
搜索显现出了行号,以及“离职”

6、打印样式匹配所位于的字符或字节偏移:

echo gunisnotunix | grep -b -o "g"
echo gunisnotunix | grep -b -o "not"
输出:0:g
5:not

小案例:

在file文件中过滤掉字符串'str'所在的行
1 grep -v "str" file
在file文件中查找时间在2017:22:50~2017:22:59所在的行
1 grep -E "2017:22:5[0-9]" file 在file文件中查找不包括360的行
1 grep -E "^[^360]" file 在file文件中查找包括w和t的行
1 grep -E "w*t" file
在file文件中查找大于560小于893的行
1 grep -E "[5-8][6-9][0-3]" 在file文件中查找包含两个9的行
1 grep -E "9{2}" file
查找大于两个9的行
1 grep -E "9{2,}" file 查找file文件中的空行
1 grep -E "^$" file 查找包括?的行
1 grep "?" file 查找文件中以w开头的行
1 grep -E "^w" file 查找文件中不是以w开头的行
1 grep -E "^[^w]" file

小案例:

grep "公告" publish_origin.csv

2、awk:数据流处理工具 Linux awk 命令 | 菜鸟教程

AWK用法入门详解 - losbyday - 博客园 www.cnblogs.com
一. AWK入门指南 - AWK程序设计语言 awk.readthedocs.io

awk: 文本分析工具;简单来说awk就是 把文件逐行的读入 ,以 空格 为默认分隔符 将每行切片 ,切开的部分再进行各种分析处理。

基本语法:

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
1、 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。
2、 awk语言的最基本功能是在文件或者字符串中 基于指定规则浏览和抽取信息 ,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
3、 通常, awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

小案例:

$ awk '/^(no|so)/' test-----打印所有以模式no或so开头的行。
$ awk '/^[ns]/{print $1}' test-----如果记录以n或s开头,就打印这个记录。
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一个域以两个数字结束就打印这个记录。
$ awk '$1 == 100 || $2 < 50' test-----如果第一个或等于100或者第二个域小于50,则打印该行。
$ awk '$1 != 10' test-----如果第一个域不等于10就打印该行。
$ awk '/test/{print $1 + 10}' test-----如果记录包含正则表达式test,则第一个域加10并打印出来。
$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。
$ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文件末尾。
1awk '{print $0}' log.log  #查找出日志文件中的每一列
$ awk '$1>2' filename    #过滤第一列大于2的行
$ awk '$1==2 {print $1,$3}' filename    #过滤第一列等于2的行
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' filename   ##过滤第一列大于2,并且第二列为Are的行

小案例:

grep "离职" publish_origin.csv | awk -F"," '{print $6, $8}'
grep "离职" publish_origin.csv | awk -F"," '{print $6, $8}' | sed 's/pdf/txt/'
grep "离职" publish_origin.csv | awk -F"," '{print $6, $8}' | sed 's/pdf/txt/' | sed 's,20.*/,,'

如果要文件名前面的/,则形式为:

grep "离职" publish_origin.csv | awk -F"," '{print $6, $8}' | sed 's/pdf/txt/' | sed 's/20.*//'

3、sed:行定位

sed命令_Linux sed 命令用法详解:功能强大的流式文本编辑器


3.1、定界符: 分割正则表达式与替换文本

定界符可以是:/,标点符号字符 替代文本是空时,可以有效地删除匹配的文本;
sed 's,20.*/,,'
= sed 's/20.\{5\}//'

1、只打印第二行,不打印其它行的数据

1sed -n '2'p file 

2、从第一行到第九行的记录

1sed -n '1,9'p file

3、打印匹配php的行

1sed -n '/php/p file

4、打印从第九行到匹配php的之间所有行

1sed -n '9,/php/'p file

5、把第一行和第二行全部删除(非文件删除)

1sed '1,2'd file 

sed 小案例:

1、's/被替换者/替换者' :取代第一个匹配的。

echo a b c a d a c> test3.txt
vim test3.txt
sed 's/a/x/' < test3.txt
输出:x b c d

当再次向 test3.txt 中重定向 内容时,会覆盖之前的数据。

echo a b c a d a c> test3.txt
vim test3.txt
之前的东西被覆盖了。

2、's/被替换者/替换者/g' :最后加上 g 表示全局替换。

sed 's/a/x/g' < test3.txt
输出:x b c x d x c

3、's/被替换者/替换者/n':取代第 n 个匹配到的

4、将多个sed实体以管道串起来时,通过-e选项的方式来完成。

sed -e 's/x/a/g' -e 's/c/y/g' < test3.txt
输出:a b y a d a y

当有很多要编辑的项目时,可以将编辑命令全放进一个脚本里,再使用 sed 搭配 -f 选项会更好:

sed删除操作:d命令

删除空白行:

sed '/^$/d' file

删除文件的第2行:

sed '2d' file

删除文件的第2行到末尾所有行:

sed '2,$d' file       sed '2,nd' file 删除第二行到第n行

删除文件最后一行:

sed '$d' file

删除文件中所有开头是test的行:

sed '/^test/'d file

所有以192.168.0.1开头的行都会被替换成它自已加localhost:

sed 's/^192.168.0.1/&localhost/' file