shell 脚本的常用命令 和 正则表达式

一.sort 命令

以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序;

比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出;

1.语法格式:

sort [选项] 参数
XXX | sort 选项 

2.常用的选项

-n:按照数字进行排序
-r:反向排序
-u:等同于uniq,表示相同的数据仅显示一行;连续的、不连续的都会被去除 
-o <输出文件>:将排序后的结果转存至指定文件
-f:忽略大小写,会将小写字母都转换为大写字母来进行比较
-b:忽略每行前面的空格

-t:指定字段分隔符,默认使用[Tab]键分隔
-k:指定排序字段
   -t 和 -k 选项一般一起使用;根据 -t 指定的分隔符的第 k 个字段进行排序

3.操作示例

 

(1)sort -n

(2)sort -r

(3)sort -u

(4)sort -t 和 sort -k

(4)sort -o 

效果和 重定向输出 类似

拓展:和 du 命令寻找目录中最大的目录或文件

二.uniq命令

用于报告或者忽略文件中连续的重复行,常与 sort 命令结合使用

1.语法格式:

uniq [选项] 参数
XXX | uniq 选项

2.常用的选项

-c    对连续的重复行进行去重,并统计重复次数
-d    仅输出连续重复的行
-u    仅输出不连续重复的行

3.操作示例

(1)uniq -c

(2)uniq -d

(3)uniq -u

拓展:通过 sort 命令 和 uniq 命令查找被攻击次数的命令

cat /var/log/secure | grep "Failed password" | awk '{print $11}' | sort -n | uniq -c

三.tr 命令

常用来对来自标准输入的字符进行替换、压缩和删除

1.语法格式

tr [选项] [参数]
XXX | tr 选项 '参数1' ['参数2']

2.常用的选项

-t    tr命令的默认选项,使用 参数2 的字符替换成 参数1 的字符
-c    仅保留 参数1 的字符,其它字符(包括\n)都替换成 参数2 的字符
-s    根据 参数1 进行去重,如果有 参数2 则再用 参数2 的字符替换 参数1 的字符
-d    删除所有 参数1 的字符

3.操作示例

【1】tr -c

echo -n 输出没有换行符

【2】tr -d

【3】tr -s

拓展:Linux 和 Windows 之间的格式转换

Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。

 转换方法1

 转换方法2:使用dos2unix软件

yum install -y dos2unix

格式为:dos2unix    文件

对数组排序   echo ${数组名[@]} | tr ' ' '\n' | sort -rn | tr '\n' ' '

四.cut命令

显示行中的指定部分,删除文件中指定字段

1.语法格式

cut  参数
XXX | cut 选项 参数

2.常用的选项

-f :通过指定哪一个字段进行提取。cut命令使用“TAB”作为默认的字段分隔符。
-d :“TAB”是默认的分隔符,使用此选项可以更改为其他的分隔符。
--complement :此选项用于排除所指定的字段。
--output-delimiter :更改输出内容的分隔符。
         一般-f 和-d 一起使用;根据 -d 指定的分隔符的截取显示 -f 指定的字段

3.操作示例

(1)cut -f 和 cut -d

(2)cut - - output-delimiter

(3)cut - - complement

拓展:字符串分片    

echo ${变量:下标:长度}                                #下标起始从0开始

echo $变量 | cut -b 起始下标-终止下标        #下标起始从1开始

expr substr $变量 起始下标 长度                   #下标起始从1开始

五.split命令

linux下将一个大的文件拆分成若干小文件

1.语法格式:

split 选项 参数 原始文件 拆分后文件名前缀

2.常用的选项

-l   根据行数分割文件
-b   根据大小分割文件
-d   输出的目标文件后缀用数字替代

3.操作示例

如何将一个10G文件分割为10个1G的文件        split -b 1G -d 原文件  目标文件名前缀
如何将一个100行文件分割为10个10行的文件    split -l 10 -d 原文件  目标文件名前缀

(1)split -l

(2)split -d

六.paste命令

用于合并文件的列

合并文件的行   cat 文件1 文件2  ... > 新文件

合并文件的列   paste -d '分隔符' 文件1 文件2 ... > 新文件

1.语法格式

paste [-s][-d <间隔字符>] 文件...
paste 选项 文件1 文件2 ...

2.常用的选项

-d '分隔符'     指定输出的字段分隔符
-s              将每个列横向输出

3.操作示例

(1)paste -d

七.eval命令

在命令行执行前,先将命令行里的变量置换成对应的值后,再执行命令

示例1

echo "hello world" > file
myfile="cat file"
echo $myfile
eval $myfile

示例2

a=100
b=a
eval echo \$$b  置换成-->  echo $a  执行-> 100
eval $b=50  置换成--> a=50 执行
echo $a -> 50

八.正则表达式

通常用于判断语句中,用来检查某一字符串是否满足某一格式;作用范围 匹配文件内容

1.正则表达式是由普通字符与元字符组成

(1)普通字符包括大小写字母、数字、标点符号及一些其他符号

(2)元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式;

2.基础正则表达式常见元字符:(支持的工具:grep、egrep、sed、awk)

\      转义字符,将一些特殊符号转义成普通字符 \? \! \\  将一些普遍字母字符转义成特殊字符 \n \t \r
^      匹配以指定字符串开头的  ^XXX
$      匹配以指定字符串结尾的  XXX$    ^$
.      代表除了 \n 以外的任意字符
[XXX]  匹配中括号里的列表中的任意一个字符  [.\n]  [0-9]  [a-zA-Z0-9]
[^XXX] 匹配除了中括号里的列表中的任何字符  [^0-9]匹配所有非数字的字符   [^a-zA-Z]匹配所有非大小字母的字符
*      匹配*前面的字符或表达式任意次数(包括0次 1次或多次) .*   [0-9]*
{n}    匹配{}前面的字符或表达式 n 次
{n,}   匹配{}前面的字符或表达式至少 n 次(大于等于 n 次)
{n,m}  匹配{}前面的字符或表达式 n 到 m 次(大于等于 n 次且小于等于 m 次)

(注:grep  sed 使用时 {} 前面要加 \ ;egep  awk  grep -E  sed -r 使用时 {} 前面不用加 \)

3.扩展正则表达式元字符:(支持的工具:egrep、awk)grep -E   sed -r

+      匹配+前面的字符或表达式至少1次(大于等于1次 {1,})
?      匹配?前面的字符或表达式0次或1次({0,1})
()     将()里的表达式作为一个整体    (oo)*   (oo)?
|      或       (oo|aa)   (oo|aa)?

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值