Linux Shell文本处理命令汇总

力天世纪浪子

力天世纪浪子

2016-02-19 15:43

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的Linux Shell文本处理命令汇总教程,一起来看看吧!超容易上手~

我们都知道Linux可用多种命令进行操作,光是用于文本处理的命令就有不少,下面图老师小编将针对Linux中Shell文本处理工具做个汇总,以便你有个了解。

 Linux Shell文本处理命令汇总

Linux下的操作习惯不像windows一样可以有窗口进行操作,它是有很多不同的命令组成的,本文将介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk

提供的例子和参数都是最常用和最为实用的;

我对shell脚本使用的原则是命令单行书写,尽量不要超过2行;

如果有更为复杂的任务需求,还是考虑python吧;

find 文件查找(详见系统之家Linux find命令常见用法汇总

•查找txt和pdf文件

代码如下:

find 。 ( -name *.txt -o -name *.pdf ) -print

•正则方式查找.txt和pdf

代码如下:

find 。 -regex .*(.txt|.pdf)$

-iregex: 忽略大小写的正则

•否定参数

查找所有非txt文本

代码如下:

find 。 ! -name *.txt -print

•指定搜索深度

打印出当前目录的文件(深度为1)

代码如下:

find 。 -maxdepth 1 -type f

定制搜索

•按类型搜索:

代码如下:

find 。 -type d -print //只列出所有目录

-type f 文件 / l 符号链接

•按时间搜索:

-atime 访问时间 (单位是天,分钟单位则是-amin,以下类似)

-mtime 修改时间 (内容被修改)

-ctime 变化时间 (元数据或权限变化)

最近7天被访问过的所有文件:

代码如下:

find 。 -atime 7 -type f -print

•按大小搜索:

w字 k M G

寻找大于2k的文件

代码如下:

find 。 -type f -size +2k

按权限查找:

代码如下:

find 。 -type f -perm 644 -print //找具有可执行权限的所有文件

按用户查找:

代码如下:

find 。 -type f -user weber -print// 找用户weber所拥有的文件

找到后的后续动作

•删除:

删除当前目录下所有的swp文件:

代码如下:

find 。 -type f -name *.swp -delete

•执行动作(强大的exec)

代码如下:

find 。 -type f -user root -exec chown weber {} ; //将当前目录下的所有权变更为weber

注:{}是一个特殊的字符串,对于每一个匹配的文件,{}会被替换成相应的文件名;

eg:将找到的文件全都copy到另一个目录:

代码如下:

find 。 -type f -mtime +10 -name *.txt -exec cp {} OLD ;

•结合多个命令

tips: 如果需要后续执行多个命令,可以将多个命令写成一个脚本。然后 -exec 调用时执行脚本即可;

代码如下:

-exec 。/commands.sh {} ;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/diannaorumen/)

-print的定界符

默认使用’n’作为文件的定界符;

-print0 使用’′作为文件的定界符,这样就可以搜索包含空格的文件;

grep 文本搜索

grep match_patten file // 默认访问匹配行

•常用参数

-o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行

-c 统计文件中包含文本的次数

代码如下:

grep -c text filename

-n 打印匹配的行号

-i 搜索时忽略大小写

-l 只打印文件名

•在多级目录中对文本递归搜索(程序员搜代码的最爱):

代码如下:

grep class 。 -R -n

•匹配多个模式

代码如下:

grep -e class -e vitural file

•grep输出以作为结尾符的文件名:(-z)

代码如下:

grep test file* -lZ| xargs -0 rm

xargs 命令行参数转换

xargs 能够将输入数据转化为特定命令的命令行参数;这样,可以配合很多命令来组合使用。比如grep,比如find;

•将多行输出转化为单行输出

cat file.txt| xargs

n 是多行文本间的定界符

•将单行转化为多行输出

cat single.txt | xargs -n 3

-n:指定每行显示的字段数

xargs参数说明

-d 定义定界符 (默认为空格 多行的定界符为 n)

-n 指定输出为多行

-I {} 指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时

eg:

代码如下:

cat file.txt | xargs -I {} 。/command.sh -p {} -1

-0:指定为输入定界符

eg:统计程序行数

代码如下:

find source_dir/ -type f -name *.cpp -print0 |xargs -0 wc -l

sort 排序

字段说明:

-n 按数字进行排序 VS -d 按字典序进行排序

-r 逆序排序

-k N 指定按第N列排序

eg:

代码如下:

sort -nrk 1 data.txt

sort -bd data // 忽略像空格之类的前导空白字符

uniq 消除重复行

•消除重复行

代码如下:

sort unsort.txt | uniq

•统计各行在文件中出现的次数

代码如下:

sort unsort.txt | uniq -c

•找出重复行

代码如下:

sort unsort.txt | uniq -d

可指定每行中需要比较的重复内容:-s 开始位置 -w 比较字符数

用tr进行转换

•通用用法

代码如下:

echo 12345 | tr ‘0-9’ ‘9876543210’ //加解密转换,替换对应字符

cat text| tr ‘t’ ‘ ’ //制表符转空格

•tr删除字符

代码如下:

cat file | tr -d ‘0-9’ // 删除所有数字

-c 求补集

代码如下:

cat file | tr -c ‘0-9’ //获取文件中所有数字

cat file | tr -d -c ‘0-9 n’ //删除非数字数据

•tr压缩字符

tr -s 压缩文本中出现的重复字符;最常用于压缩多余的空格

代码如下:

cat file | tr -s ‘ ’

•字符类

tr中可用各种字符类:

alnum:字母和数字

alpha:字母

digit:数字

space:空白字符

lower:小写

upper:大写

cntrl:控制(非可打印)字符

print:可打印字符

使用方法:tr [:class:] [:class:]

代码如下:

eg: tr ‘[:lower:]’ ‘[:upper:]’

cut 按列切分文本

•截取文件的第2列和第4列:

代码如下:

cut -f2,4 filename

•去文件除第3列的所有列:

代码如下:

cut -f3 --complement filename

•-d 指定定界符:

代码如下:

cat -f2 -d; filename

•cut 取的范围

N- 第N个字段到结尾

-M 第1个字段为M

N-M N到M个字段

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/diannaorumen/)

•cut 取的单位

-b 以字节为单位

-c 以字符为单位

-f 以字段为单位(使用定界符)

•eg:

代码如下:

cut -c1-5 file //打印第一到5个字符

cut -c-2 file //打印前2个字符

paste 按列拼接文本

将两个文本按列拼接到一起;

代码如下:

cat file1

1

2

cat file2

colin

book

paste file1 file2

1 colin

2 book

默认的定界符是制表符,可以用-d指明定界符

paste file1 file2 -d ,

1,colin

2,book

wc 统计行和字符的工具

wc -l file // 统计行数

wc -w file // 统计单词数

wc -c file // 统计字符数

sed 文本替换利器

•首处替换

代码如下:

seg ‘s/text/replace_text/’ file //替换每一行的第一处匹配的text

•全局替换

代码如下:

seg ‘s/text/replace_text/g’ file

默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:

代码如下:

seg -i ‘s/text/repalce_text/g’ file

•移除空白行:

代码如下:

sed ‘/^$/d’ file

•变量转换

已匹配的字符串通过标记&来引用

代码如下:

echo this is en example | seg ‘s/w+/[&]/g’

$》[this] [is] [en][example]

•子串匹配标记

第一个匹配的括号内容使用标记 1 来引用

代码如下:

sed ‘s/hello([0-9])/1/’

•双引号求值

sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值:

代码如下:

sed ‘s/$var/HLLOE/’

当使用双引号时,我们可以在sed样式和替换字符串中指定变量;

代码如下:

eg:

p=patten

r=replaced

echo line con a patten | sed s/$p/$r/g

$》line con a replaced

•其它示例

字符串插入字符:将文本中每行内容(PEKSHA)转换为 PEK/SHA

代码如下:

sed ‘s/^.{3}/&//g’ file

awk 数据流处理工具

•awk脚本结构

awk ‘ BEGIN{ statements } statements2 END{ statements } ‘

•工作方式

1.执行begin中语句块;

2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;

3.执行end语句块;

print 打印当前行

•使用不带参数的print时,会打印当前行;

代码如下:

echo -e line1nline2 | awk ‘BEGIN{print start} {print } END{ print End }’

•print 以逗号分割时,参数以空格定界;

代码如下:

echo | awk ‘ {var1 = v1 ; var2 = V2; var3=v3;

print var1, var2 , var3; }’

$》v1 V2 v3

•使用-拼接符的方式(作为拼接符);

代码如下:

echo | awk ‘ {var1 = v1 ; var2 = V2; var3=v3;

print var1-var2-var3; }’

$》v1-V2-v3

特殊变量: NR NF $0 $1 $2

NR:表示记录数量,在执行过程中对应当前行号;

NF:表示字段数量,在执行过程总对应当前行的字段数;

$0:这个变量包含执行过程中当前行的文本内容;

$1:第一个字段的文本内容;

$2:第二个字段的文本内容;

代码如下:

echo -e line1 f2 f3n line2 n line 3 | awk ‘{print NR:$0-$1-$2}’

•打印每一行的第二和第三个字段:

代码如下:

awk ‘{print $2, $3}’ file

•统计文件的行数:

代码如下:

awk ‘ END {print NR}’ file

展开更多 50%)
分享

猜你喜欢

Linux Shell文本处理命令汇总

电脑入门
Linux Shell文本处理命令汇总

Linux 常用命令(文本处理)

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
Linux 常用命令(文本处理)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

linux 文本处理工具之一grep命令详解

服务器
linux 文本处理工具之一grep命令详解

Linux如何使用文本处理工具awk

电脑入门
Linux如何使用文本处理工具awk

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

WML教程14:WML 文本处理

电脑网络
WML教程14:WML 文本处理

CorelDRAW 12循序渐进(12)-文本处理

CorelDRAW
CorelDRAW 12循序渐进(12)-文本处理

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle 10G - 增强的CONNECT BY子句

Oracle 10G - 增强的CONNECT BY子句

JQuery 学习笔记 选择器之三

JQuery 学习笔记 选择器之三
下拉加载更多内容 ↓