shell 文本处理的几个命名sed,awk,sort,uniq,cut

文本处理

Cat命令

1)  拼接文件:纵向拼接,不是横向拼接

[email protected]:~# cat list list2

line2

line3

line4

line5

line5

line6

line7

total 32K

lrwxrwxrwx 1 root root   12 Jan  4 11:30 backup -> /data/backup

-rw-r--r-- 1 root root   46 Apr  1 13:18 list

-rw-r--r-- 1 root root    0 Apr  1 13:29 list2

-rwxr-xr-x 1 root root   84 Apr  1 09:24 test.sh

drwxr-xr-x 4 root root 4.0K Apr  1 13:16test_shell

drwxr-xr-x 2 root root 4.0K Mar 28 09:42 tmp

drwxr-xr-x 6 root root 4.0K Jul 19  2016tools

[email protected]:~# ls -lh | cat - list    #这里的-标示标准输入

total 36K

lrwxrwxrwx 1 root root   12 Jan  4 11:30 backup -> /data/backup

-rw-r--r-- 1 root root   46 Apr  1 13:18 list

-rw-r--r-- 1 root root  512 Apr  1 13:29 list2

drwxr-xr-x 10 root root 4.0K Mar 23  2016 root

-r-------- 1 root root 1.7K Mar 31 10:06 solar

drwxr-xr-x 3 root root 4.0K Dec  1 10:07testgit

-rwxr-xr-x 1 root root   84 Apr  1 09:24 test.sh

drwxr-xr-x 4 root root 4.0K Apr  1 13:16test_shell

drwxr-xr-x 2 root root 4.0K Mar 28 09:42 tmp

drwxr-xr-x 6 root root 4.0K Jul 19  2016tools

line2

line3

line4

line5

line5

line6

2)  格式化输出

输出行号

[email protected]:~# cat -n list

1  line2

2  line3

3  line4

4  line5

5  line5

6  line6

压缩空格行

[email protected]:~# cat -s list

line2

line3

line4

line5

line5

line6

line7

paste

按列合并文件:纵向拼接

[email protected]:~# paste employe.txt bonus.txt | awk ‘{print $1,$2,$3,$5}‘ | tr ‘[A-Z]‘ ‘[a-z]‘ |s

ort -s -k2

400 ashok sharma $1,250

100 jason smith $5,000

200 john doe $500

300 sanjay gupta $3,000

[email protected]:~# cat employe.txt

100 Jason Smith

200 John Doe

300 Sanjay Gupta

400 Ashok Sharma

[email protected]:~# cat b

cat: b: No such file or directory

[email protected]:~# cat bonus.txt

100 $5,000

200 $500

300 $3,000

400 $1,250

cut

以列形式处理文本行

-d  以什么作为分隔符来分割列

-f  指定要显示哪几个列

排序、去重

Sort

-n 按照数字序列排序

-r 倒序排序

-k 指定以某列

-d 以字典序列排序

tac

会以逆序的方式打印输出

[email protected]:~# cat list

line2 200

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

[email protected]:~# cat list | tac -

line7 350

line6 50

line5 800

line5 700

line4 100

line3 100

line2 200

Uniq

Uniq会去除重复的行,但仅限于是已经拍过序的输入,或者是已经排过序的文件。

-u  只显示那些是唯一的行

-c  统计重复行出现的次数

-d  找出重复行的内容

tr命令

tr是一个构建一行命令的一个小而美的工具。tr只能接收标准输入作为命令参数。tr可以进行文件的转换、删除、压缩

替换

[email protected]:~# echo "123 abcdefg:aaa:" | tr ":" "<"

123 abcd efg<aaa<

删除

[email protected]:~# echo "123 abcdefg:aaa:" | tr -d ":‘

> ^C

[email protected]:~# echo "123 abcdefg:aaa:" | tr -d ":"

123 abcd efgaaa

-c定义个集合,不再这个集合中的内容全部删除。

[email protected]:~# echo "123 abcdefg:aaa:" | tr   -d -c ‘a-z \n‘

abcdefgaaa

[email protected]:~# echo "123 abcdefg:aaa:" | tr  ‘a-z‘ ‘A-Z‘

123 ABCD EFG:AAA:

特殊用法,能够通过字符的替换,进行字符的加密.

文本匹配搜索grep

[email protected]:~# grep"hello" test.sh

123aab456 1232 hello

assbbb  hello112332 asss

[email protected]:~# grep"hello$" test.sh --color=auto

123aab456 1232 hello

#匹配多个匹配条件

[email protected]:~# grep -e"hello$" -e "asss" --color=auto ./test.sh

123aab456 1232 hello

assbbb  hello112332 asss

指定搜索的文件或路径

grep  “text” ./ -r –include  *.(cpp,c)

Sed

可以替换查找到的字符串为我们指定的新字符创

常规使用: 不修改原本的文件内容

[email protected]:~# sed ‘s/line2/tttt/g‘list

tttt 200

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

[email protected]:~# cat list

line2 200

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

带正则表达式匹配&  将已经比配的字符串当成变量使用。

这里的&,就标示着已经被匹配到的字符创,具体哪个字符创算是被匹配到的,就是我们用括号,括起来的部分。

[email protected]:~# cat list

line2 200

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

[email protected]:~# sed  ‘s/\w\+2 \(\w\+\)/[--&--]/g‘  list

[--line2 200--]

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

如果存在多字()来匹配字符串那么我们可以使用数字标号来表示具体哪个匹配

[email protected]:~# sed ‘s/\(\w\+\)2\(\w\+\)/[--\1--] [\2]/g‘  list

[--line--] [200]

line3 100

line4 100

line5 700

line5 800

line6 50

line7 350

多个sed进行组合,

[email protected]:~# sed ‘s/\(\w\+\)2\(\w\+\)/[--\1--] [\2]/g‘  list  |  sed ‘s/line7/tttt/g‘

[--line--] [200]

line3 100

line4 100

line5 700

line5 800

line6 50

tttt 350

awk

awk的功能十分强大,这里由于篇幅的原因,我没有列在这里,可以查看之前发过的一个篇文章及评论

http://atong.blog.51cto.com/2393905/1343553

另外有时间的建议去看看awk编程语言这本书,基本上可以跳着看书中列举的示例,200多页的书,但可以非常快的看过去。1小时候内肯定可以看得完。

时间: 2024-10-10 14:01:36

shell 文本处理的几个命名sed,awk,sort,uniq,cut的相关文章

sort uniq cut sed wc指令入门以及练习

sort sort是一种非常简单而且非常有用的命令,它将重新排列文本文件里面的行,默认情况下的排序规则: 以数字开头的行将出现在以字母开头的行之前. 以字母表中较早出现的字母开头的行将出现在以字母表后面出现的字母开头的行之前. 以小写字母开头的行将出现在以大写字母开头的行之前. 语法 sort [option] filename or stdin 常用option参数: -f:忽略大小写的差异,例如 A 与 a 视为编码相同: -b:忽略最前面的空格符部分: -M:以月份的名字来排序,例如 JA

文本处理工具之:grep sed awk

正则就是用一些具有特殊含义的符号组合一起来描述字符或字符串的方法.在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,下面我们就为大家介绍三种文本处理工具/命令:grep.sed.awk,它们三者均可以解释正则 一:grep 参数 -n :显示行号 -o :只显示匹配的内容 -q :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容 -l :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc

7、Shell工具 cut sed awk sort

1 cut cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的.cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段输出. 1.基本用法 cut [选项参数]  filename 说明:默认分隔符是制表符 2.选项参数说明 表1-55 选项参数 功能 -f 列号,提取第几列 -d 分隔符,按照指定分隔符分割列 -c 指定具体的字符 cut -c 2,3,4     cut -c 2-8   2-8之间的字符 3.案例实操 (0)数据准备 [[email protect

Shell脚本 (四)正则表达式 grep sed awk 工具

正则表达式定义正则表达式,又称正规表达式.常规表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串·正则表达式组成普通字符大小写字母.数字.标点符号及一些其他符号元字符在正则表达式中具有特殊意义的专用字符·基础正则表达式示例查找特定字符利用中括号[]来查找集合字符查找行首^与行尾字符$查找任意一个字符.与重复字符查找连续字符范围{}·基础正则表达式的常见元字符^.$...\..[ ].[^ ].[n1-n2].{n}.{n,}.{n,m}·####查找特定字符####n--表示显示行

使用awk+sort+uniq进行文本分析

1.uniq命令uniq - report or omit repeated lines介绍:uniq对指定的ASCII文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行.常用于系统排查及日志分析命令格式:uniq [OPTION]... [File1 [File2]]uniq从已经排序好的文本文件File1中删除重复的行,输出到标准标准输出或File2.常作为过滤器,配合管道使用.在使用uniq命令之前,必须确保操作的文本文件已经过sort排序,若不带参数运行uniq,将删除重复的行.

Linux Shell 文本处理工具集锦

本文将介绍Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk: 提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行: 如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件 find . ( -name "*.txt" -o -name "*.pdf" ) -print 正则方

sed &amp;&amp; awk工具 及一些常用的shell脚本

(一)sed sed是一个精简的.非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出. 逐行读取文件内容存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.原文件爱你的内容并没有改变. sed '4,$d' test.in # 删除4~最后一行 sed '3q' test.in # 读到指定行之后退出 sed 's/public

Linux Shell 文本处理工具

Linux下使用Shell处理文本时最常用的工具: find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk: 提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行: 如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件  find . ( -name "*.txt" -o -name "*.pdf" ) -print 正则方式查找.

shell脚本(正则表达+sed+awk)

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