Shell实用技巧
Shell操作日期时间
linux系统为我们提供了一个命令date,专门用来显示或者设置系统日期时间的。
格式
1
2
3
4
5
6
7
8
9
10# date - print or set the system date and time
# 语法格式为:
date [OPTION]... [+FORMAT] 或者
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
# 常用的可选项有:
--help:显示辅助信息
--version:显示date命令版本信息
-u:显示目前的格林威治时间
-d:做日期时间相关的运算
--date='-dateStr':做日期时间的相关运算显示系统当前日期时间
1
2[hadoop@hadoop01 ~]$ date
Sun Aug 16 18:00:08 CST 2020设置系统日期时间
1
2[root@hadoop ~]# date -s "2017-01-01 01:01"
[root@hadoop ~]# date --set="2017-01-01 01:01"获取前后年月周的时间,
'-d'
配合last-year,last-month,last-day,last-week,last-hour,last-minute,last-second都有对应的实现。相反的,last对应next,自己可以根据实际情况灵活组织。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31## 获取下一天的时间
[root@hadoop ~]# date -d next-day '+%Y-%m-%d %H:%M:%S'
[root@hadoop ~]# date -d 'next day' '+%Y-%m-%d %H:%M:%S'
另外一种写法:
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' -d tomorrow
## 获取上一天的时间
[root@hadoop ~]# date -d last-day '+%Y-%m-%d %H:%M:%S'
另外一种写法:
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' -d yesterday
## 获取下一月的时间
[root@hadoop ~]# date -d next-month '+%Y-%m-%d %H:%M:%S'
## 获取上一月的时间
[root@hadoop ~]# date -d last-month '+%Y-%m-%d %H:%M:%S'
## 获取下一年的时间
[root@hadoop ~]# date -d next-year '+%Y-%m-%d %H:%M:%S'
## 获取上一年的时间
[root@hadoop ~]# date -d last-year '+%Y-%m-%d %H:%M:%S'
## 获取上/下一周的日期时间:
[root@hadoop ~]# date -d last-week '+%Y-%m-%d %H:%M:%S'
[root@hadoop ~]# date -d next-week '+%Y-%m-%d %H:%M:%S'
## 下周一
[root@hadoop ~]# date -d next-monday '+%Y-%m-%d %H:%M:%S'
## 下周四
[root@hadoop ~]# date -d next-thursday '+%Y-%m-%d %H:%M:%S'获取前几天或者后几天的时间。来看’–date’,实现任意时间前后的计算.使用精髓在于改变前面的字符串显示格式,改变数据,改变要操作的日期对应字段,除了天也有对应的其他实现:year,month,week,day,hour,minute,second,monday(星期,七天都可)
1
2
3
4
5
6
7## 获取一天以后的日期时间
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='1 day'
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='-1 day ago'
## 获取一天以前的日期时间
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='-1 day'
[root@hadoop ~]# date '+%Y-%m-%d %H:%M:%S' --date='1 day ago'以指定格式显示日期时间:date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:
日期
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17日期方面:
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期和时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yyyy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24时间方面:
%%: 打印出%
%n : 下一行
%t : 跳格
%H : 小时(00..23)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地AM或PM
%P : 显示本地am或pm
%r : 直接显示时间(12 小时制,格式为 hh:mm:ss [AP]M)
--> %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间(24小时制)
%X : 相当于%H:%M:%S %p
%Z : 显示时区
若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss]
MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数使用范例:
1
2
3# 以指定格式显示日期时间
[hadoop@hadoop01 ~]$ date '+%Y-%m-%d %H:%M:%S'
2020-08-16 18:00:21
有用的小技巧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25## 获取相对某个日期前后的日期:
[hadoop@hadoop01 ~]$ date -d 'may 01 -2 weeks' '+%Y-%m-%d %H:%M:%S'
2020-04-17 00:00:00
[hadoop@hadoop01 ~]$ date -d 'may 01 2 weeks' '+%Y-%m-%d %H:%M:%S'
2020-05-15 00:00:00
## 把时间当中无用的0去掉,比如:01:02:25会变成1:2:25
[hadoop@hadoop01 ~]$ date '+%-H:%-M:%-S'
18:36:3
## 显示文件最后被更改的时间
[hadoop@hadoop01 ~]$ date "+%Y-%m-%d %H:%M:%S" -r apps/
2020-08-05 03:40:41
## 求两个字符串日期之间相隔的天数
[hadoop@hadoop01 ~]$ expr '(' $(date +%s -d "2016-08-08") - $(date +%s -d "2016-09-09") ')' / 86400
-32
## shell中加减指定间隔单位
[hadoop@hadoop01 ~]$ A=`date +%Y-%m-%d`
[hadoop@hadoop01 ~]$ echo $A
2020-08-16
[hadoop@hadoop01 ~]$ B=`date +%Y-%m-%d -d "$A +48 hours"`
[hadoop@hadoop01 ~]$ echo $B
2020-08-18
高级文本处理命令
wc
功能: 统计文件行数、字节、字符数
常用选项:
1
2
3
4
5
6
7-l:统计多少行
-w:统计字数
-c:统计文件字节数,一个英文字母1字节,一个汉字占2-4字节(根据编码)
-m:统计文件字符数,一个英文字母1字符,一个汉字占1个字符
-L:统计最长行的长度, 也可以统计字符串长度
-help:显示帮助信息
--version:显示版本信息一个汉字到底几个字节?
- 占2个字节的:〇
- 占3个字节的:基本等同于GBK,含21000多个汉字
- 占4个字节的:中日韩超大字符集里面的汉字,有5万多个
- 一个utf8数字占1个字节
- 一个utf8英文字母占1个字节
示例:
1 | # 统计文件信息 |
sort
功能:排序文本,默认对整列有效
常用可选项:
1
2
3
4
5
6
7
8
9
10-f:忽略字母大小写,就是将小写字母视为大写字母排序
-M:根据月份比较,比如 JAN、DEC
-h:根据易读的单位大小比较,比如 2K、1G
-g:按照常规数值排序
-n:根据字符串数值比较
-r:倒序排序
-k:位置1,位置2 根据关键字排序,在从第位置1开始,位置2结束
-t:指定分隔符
-u:去重重复行
-o:将结果写入文件准备数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52## 准备排序文件,查看该内容
[hadoop@hadoop01 test]$ cat sort.txt
aaa:10:1.1
ccc:20:3.3
bbb:40:4.4
eee:40:5.5
ddd:30:3.3
bbb:40:4.4
fff:30:2.2
## 直接排序,把整行当做一列字符串,字典顺序
[hadoop@hadoop01 test]$ sort sort.txt
aaa:10:1.1
bbb:40:4.4
bbb:40:4.4
ccc:20:3.3
ddd:30:3.3
eee:40:5.5
fff:30:2.2
## 以:作为分隔符,取第二个字段按照数值进行排序
[hadoop@hadoop01 test]$ sort -nk 2 -t : sort.txt
aaa:10:1.1
ccc:20:3.3
ddd:30:3.3
fff:30:2.2
bbb:40:4.4
bbb:40:4.4
eee:40:5.5
## 和上一个不一样的是-u为了去重,根据-k指定的位置为key去重
[hadoop@hadoop01 test]$ sort -nk 2 -u -t : sort.txt
aaa:10:1.1
ccc:20:3.3
ddd:30:3.3
bbb:40:4.4
## 多列排序:以:分隔,按第二列数值排倒序,第三列正序
## sort -t : -k 2nr -k 3n sort.txt
# 其中n是按数字 也可以是g按数值
# t 指定分割符为 :
# k 指定列数 2,2是第一列开始到第一列结束
# r 表示反向排序
[linux@linux ~]$ sort -n -t: -k2,2r -k3 sort.txt
bbb:40:4.4
bbb:40:4.4
eee:40:5.5
fff:30:2.2
ddd:30:3.3
ccc:20:3.3
aaa:10:1.1
uniq
功能:去除重复行,只会统计相邻的
常用选项:
1
2
3
4
5
6
7
8-c:打印出现的次数
-d:只打印重复行
-u:只打印不重复行
-D:只打印重复行,并且把所有重复行打印出来
-f N:比较时跳过前N列
-i:忽略大小写
-s N:比较时跳过前N个字符
-w N:对每行第N个字符以后内容不做比较案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46## 准备数据:
[hadoop@hadoop01 test]$ cat -n uniq.txt
1 abc
2 xyz
3 cde
4 cde
5 xyz
6 abd
## 直接去重,只能在相邻行去重,原始文件没有改变
[linux@linux ~]$ uniq uniq.txt
abc
xyz
cde
xyz
abd
## 先给文件排序,然后去重
[hadoop@hadoop01 test]$ sort uniq.txt | uniq
abc
abd
cde
xyz
## 打印每行重复次数
[hadoop@hadoop01 test]$ sort uniq.txt | uniq -c
1 abc
1 abd
2 cde
2 xyz
## 打印不重复行,并给出次数
[hadoop@hadoop01 test]$ sort uniq.txt | uniq -u -c
1 abc
1 abd
## 打印重复行,并给出次数
[hadoop@hadoop01 test]$ sort uniq.txt | uniq -d -c
2 cde
2 xyz
## 以开头前两个字符为判断标准去重
[hadoop@hadoop01 test]$ sort uniq.txt | uniq -w 2
abc
cde
xyz
取交集,并集,差集
1 |
|
求两个文件的交集:
1
2
3[hadoop@hadoop01 test]$ cat a.txt b.txt | sort |uniq -d
2
3求两个文件的并集:
1
2
3
4
5[hadoop@hadoop01 test]$ cat a.txt b.txt | sort |uniq
1
2
3
4求a.txt和b.txt的差集
1
2[hadoop@hadoop01 test]$ cat a.txt b.txt b.txt | sort | uniq -u
1求b.txt和a.txt的差集
1
2[hadoop@hadoop01 test]$ cat b.txt a.txt a.txt | sort | uniq -u
4
cut
cut命令可以从一个文本文件或者文本流中提取文本列
- cut语法
1 | cut -d'分隔字符' -f fields ## 用于有特定分隔字符 |
例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 首先看PATH变量:
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# 将PATH变量取出,找出第五个路径
[root@localhost ~]# echo $PATH | cut -d ':' -f 5
/usr/sbin
# 将PATH变量取出,找出第三和第五个路径,以下三种方式都OK
[root@localhost ~]# echo $PATH | cut -d ':' -f 3,5
[root@localhost ~]# echo $PATH | cut -d : -f 3,5
[root@localhost ~]# echo $PATH | cut -d: -f3,5
/sbin:/usr/sbin
# 将PATH变量取出,找出第三到最后一个路径
[root@localhost ~]# echo $PATH | cut -d ':' -f 3-
/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# 将PATH变量取出,找出第一到第三,还有第五个路径
[root@localhost ~]# echo $PATH | cut -d ':' -f 1-3,5
/usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin例子2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 先准备已空格分开的这么段数据:cut.txt
黄渤 huangbo 18 jiangxi
徐峥 xuzheng 22 hunan
王宝强 wangbaoqiang 44 liujiayao
# 获取中间的年龄:
[root@localhost ~]# cut -f 3 -d ' ' cut.txt
18
22
44
# 获取第二个字符到第五个字符之间的字符:
[root@localhost ~]# cut -c 2-5 cut.txt
渤 hu
峥 xu
宝强 w
获取第四个字节到第六个字节中的字符:
[root@hadoop ~]# cut -b 4-6 cut.txt
渤
峥
宝
grep(文本生成器)
grep是一种强大的文本搜索工具,他能使用正则表达式搜索文本,并把匹配的行统计出来
命令:
1
2
3
4
5
6
7
8
9
10grep [选项] [–color=auto] ”搜索字符串” filename
常用参数:
-c:统计符合条件的字符串出现的总行数。
-E:支持扩展正则表达式。
-i:忽略字符大小写。
-n:在显示匹配到的字符串前面加上行号。
-v:显示没有”搜索字符串”内容的那一行。
-l:列出文件内容中有搜索字符串的文件名称。
-o:只输出文件中匹配到的部分。
-color=auto:将匹配到的字符串高亮出来。基本使用
1
2
3
4
5
6
7# 查询包含hadoop的行
[hadoop@hadoop01 test]$ grep hadoop /etc/passwd
hadoop:x:1000:1000:hadoop:/home/hadoop:/bin/bash
## 寻找当前路径下所有txt当中内容那些是带了黄渤字符串的
[hadoop@hadoop01 test]$ grep "黄渤" ./*.txt
./cut.txt:黄渤 huangbo 18 jiangxi选项示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33[hadoop@hadoop01 test]$ cat grep.txt
huangbo is shuaige
huangxiaoming is shuaige
liuyifei is meinv
hello world hello tom hello kitty
#how old are you
#one two three four five six seven eight nine ten
[hadoop@hadoop01 test]$
## 统计出现某个字符串的行的总行数
[hadoop@hadoop01 test]$ grep -c 'hello' grep.txt
1
[hadoop@hadoop01 test]$ grep -c 'is' grep.txt
3
## 查询不包含is的行
[hadoop@hadoop01 test]$ grep -v 'is' grep.txt
hello world hello tom hello kitty
#how old are you
#one two three four five six seven eight nine ten
[hadoop@hadoop01 test]$ grep -v 'is' grep.txt |wc -l
3
## 正则表达包含huang
[hadoop@hadoop01 test]$ grep '.*huang.*' grep.txt
huangbo is shuaige
huangxiaoming is shuaige
## 输出匹配行的前后N行(会包括匹配行)
使用-A参数输出匹配行的后一行:grep -A 1 "huangxiaoming" grep.txt
使用-B参数输出匹配行的前一行:grep -B 1 "huangxiaoming" grep.txt
使用-C参数输出匹配行的前后各一行:grep -C 1 "huangxiaoming" grep.txt正则示例
1
2
3
4
5
6
7
8
9
10
11正则表达式的简单规则:
. : 任意一个字符
a* : 任意多个a(零个或多个a)
a? : 零个或一个a
a+ : 一个或多个a
.* : 任意多个任意字符
\. : 转义.
o\{2\} : o重复两次
[A-Z]
[ABC]1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 正则表达(点代表任意一个字符)
grep 'h.*p' /etc/passwd
# 正则表达以hadoop开头
grep '^hadoop' /etc/passwd
# 正则表达以hadoop结尾
grep 'hadoop$' /etc/passwd
# 以h或r开头的
grep '^[hr]' /etc/passwd
# 不是以h和r开头的
grep '^[^hr]' /etc/passwd
# 不是以h到r开头的
grep '^[^h-r]' /etc/passwd
# 查找不是以#开头的行
[root@localhost ~]# grep -v '^#' grep.txt
# 不是以#开头的行,该行不是空行
[root@localhost ~]# grep -v '^#' grep.txt | grep -v '^$'
sed(流编辑器)
sed叫做流编辑器,在shell脚本和Makefile中作为过滤一使用非常普遍
也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换成为另一种格式输出。
sed是一种在线编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
文件内容并没有改变,除非你使用重定向存储输出。
选项:
1
2
3-n:一般sed命令会把所有数据都输出到屏幕,如果加入-n选项的话,则只会把经过sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑。
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。动作:
1
2
3
4
5
6a:追加,在当前行后添加一行或多行。
c:行替换,用c后面的字符串替换原数据行。
d: 删除
i:插入,在当前行前插入一行或多行。
p:打印,输出指定的行。
s:字符串替换,用一个字符串替换另外一个字符串。格式为'行范围s/旧字符串/新字符串/g' (如果不加g的话,则表示只替换每行第一个匹配的串)示例
1 | # 删除:d命令 |
awk(报表生成器)
- Awk是一个强大的处理文本的编程语言工具,其名称得自于它的创始人Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母,
- 相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
- AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
- 简单来说awk就是扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
1 | 1、假设last -n 5的输出如下: |
find
格式
1
2
3
4
5
6
7
8
9
10
11
12
13格式: find path -option actions
find <路径> <选项> [表达式]
常用可选项:
-name 根据文件名查找,支持('* ' , '? ')
-type 根据文件类型查找(f-普通文件,c-字符设备文件,b-块设备文件,l-链接文件,d-目录)
-perm 根据文件的权限查找,比如 755
-user 根据文件拥有者查找
-group 根据文件所属组寻找文件
-size 根据文件小大寻找文件
-o 表达式 或
-a 表达式 与
-not 表达式 非示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56[linux@linux txt]$ ll ## 准备的测试文件
total 248
-rw-rw-r--. 1 linux linux 235373 Apr 18 00:10 hw.txt
-rw-rw-r--. 1 linux linux 0 Apr 22 05:43 LINUX.pdf
-rw-rw-r--. 1 linux linux 3 Apr 22 05:50 liujialing.jpg
-rw-rw-r--. 1 linux linux 0 Apr 22 05:43 mingxing.pdf
-rw-rw-r--. 1 linux linux 57 Apr 22 04:40 mingxing.txt
-rw-rw-r--. 1 linux linux 66 Apr 22 05:15 sort.txt
-rw-rw-r--. 1 linux linux 214 Apr 18 10:08 test.txt
-rw-rw-r--. 1 linux linux 24 Apr 22 05:27 uniq.txt
[linux@linux txt]$ find /home/linux/txt/ -name "*.txt" ## 查找文件名txt结尾的文件
/home/linux/txt/uniq.txt
/home/linux/txt/mingxing.txt
/home/linux/txt/test.txt
/home/linux/txt/hw.txt
/home/linux/txt/sort.txt
## 忽略大小写查找文件名包含linux
[linux@linux txt]$ find /home/linux/txt -iname "*linux*"
/home/linux/txt/LINUX.pdf
## 查找文件名结尾是.txt或者.jpg的文件
[linux@linux txt]$ find /home/linux/txt/ \( -name "*.txt" -o -name "*.jpg" \)
/home/linux/txt/liujialing.jpg
/home/linux/txt/uniq.txt
/home/linux/txt/mingxing.txt
/home/linux/txt/test.txt
/home/linux/txt/hw.txt
/home/linux/txt/sort.txt
另一种写法:find /home/linux/txt/ -name "*.txt" -o -name "*.jpg"
使用正则表达式的方式去查找上面条件的文件:
[linux@linux txt]$ find /home/linux/txt/ -regex ".*\(\.txt\|\.jpg\)$"
/home/linux/txt/liujialing.jpg
/home/linux/txt/uniq.txt
/home/linux/txt/mingxing.txt
/home/linux/txt/test.txt
/home/linux/txt/hw.txt
/home/linux/txt/sort.txt
## 查找.jpg结尾的文件,然后删掉
[linux@linux txt]$ find /home/linux/txt -type f -name "*.jpg" -delete
[linux@linux txt]$ ll
total 248
-rw-rw-r--. 1 linux linux 235373 Apr 18 00:10 hw.txt
-rw-rw-r--. 1 linux linux 0 Apr 22 05:43 LINUX.pdf
-rw-rw-r--. 1 linux linux 0 Apr 22 05:43 mingxing.pdf
-rw-rw-r--. 1 linux linux 57 Apr 22 04:40 mingxing.txt
-rw-rw-r--. 1 linux linux 66 Apr 22 05:15 sort.txt
-rw-rw-r--. 1 linux linux 214 Apr 18 10:08 test.txt
-rw-rw-r--. 1 linux linux 24 Apr 22 05:27 uniq.txt
# 筛选当前目录下文件 | 统计文件中"关键字"的个数 | 过滤掉"关键字"个数为0的情况 | 根据:分割域,按照第二个的 按照"number"类型的个数排序(升序)
find . -name "*/文件名" | xargs grep -c "关键字" | awk -F ":" '($2>0) {print $0}' | sort -t ":" -k 2,2nr
Shell操作字符串
字符串截取
Linux中操作字符串,也是一项必备的技能。其中尤以截取字符串更加频繁,下面为大家介绍几种常用方式,
1 | 1、#截取,删除左边字符串(包括制定的分隔符),保留右边字符串 |
替换
使用格式:
${parameter/pattern/string}
例子:
1
2
3
4
5
6
7
8
9
10# 定义变量VAR:
[linux@linux ~]$ VAR="hello tom, hello kitty, hello xiaoming"
# 替换第一个hello:/hello/hi
[linux@linux ~]$ echo ${VAR/hello/hi}
hi tom, hello kitty, hello xiaoming
# 替换所有hello: //hello/hi
[linux@linux ~]$ echo ${VAR//hello/hi}
hi tom, hi kitty, hi xiaoming
字符串长度
在此为大家提供五种方式获取某字符串的长度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
191、使用wc -L命令
[root@hadoop ~]# echo ${WEBSITE} |wc -L
35
2、使用expr的方式去计算
[root@hadoop ~]# expr length ${WEBSITE}
35
3、通过awk + length的方式获取字符串长度
[root@hadoop ~]# echo ${WEBSITE} | awk '{print length($0)}'
35
4、通过awk的方式计算以""分隔的字段个数
[root@hadoop ~]# echo ${WEBSITE} |awk -F "" '{print NF}'
35
5、通过#的方式获取字符串(最简单,最常用)
[root@hadoop ~]# echo ${#WEBSITE}
35