一..将文件的内容赋给一个变量:
file=$(cat filelist)
file=$(< file)
NOTE:后者性能比前者好
二..bash 分组匹配:
HOSTNAME='mysql-10=='
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[0]};echo $VAR
-10==
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[1]};echo $VAR
10
[root@node2 ~]# [[ $HOSTNAME =~ -([0-9]+)(.*) ]];VAR=${BASH_REMATCH[2]};echo $VAR
==
三..命令替换:
1.$(ls)
2.`ls`
四.新开一个子shell执行命令:
(umask 000;mkdir hello;mkdir word)
创建了两个目录,权限都为777
五.set
set -x 以debug模式执行shell,显示执行过程
set -e 如果某一条shell出错就不再往后继续执行
正则表达式:
[[space:]] #空白字符
[[:digit:]] #数字
[[:alnum;]] #数字和字母
[[:punct:]] #标点符号
[[:lower:]] #小写字母
[[:upper:]] #大写字母
[[:alpha:]] #大小写字母
. #匹配单个字符
* #匹配前面字符任意次
.* #匹配任意长度字符,也包含空行
\? #匹配前面字符一次或零次
\{m,n\} #匹配前面字符至少M次,最多n次
\(ab\) #分组匹配,主要用于搭配后项引用,前面匹配到什么,后面就引用什么(eg:grep "\(l..e\).*\1$" test #匹配以括号中匹配到的内容结尾的行)
位置锁定:
^ #行首(如果出现在'[ ]'中,则表示排除,eg grep '[^1-2]' test,表示排除除了1和2的行)
$ #行尾
^$ #空行
\< #词首
\> #词尾
grep参数:
-i #忽略大小写
-n #显示行号
-c #统计符合条件的行
-v #排除符合条件的行
-An #打印符合条件行及下面的n行
-Bn #打印符合条件行及上面的n行
-Cn #打印符合条件的行及上下n行
egrep:
+ #匹配前面字符至少一次
? #匹配前面字符一次或零次
{m,n} #匹配前面字符至少m次,最多n次
(a|b) #匹配a或b
sed:
参数:
-n 静默模式,不再显示模式空间的内容
-i 直接应用在文件中生效,如果不加-i,只是输出到屏幕而不应用到文件
-r 使用扩展正则表达式
-f 保存至文件执行
sed '/hello/a\test' test #在匹配到内容的下一行追加指定内容
sed 's/hello/&test/' test #在匹配到的内容后追加新内容
wd 's/hello/test&/' test #在匹配到的内容前追加新内容
sed '1i\test' passwd #在第一行前面添加test
sed '1a\test' passwd #在第一行后面添加test
sed -n '1'p passwd #打印第一行
sed '1w test' passwd #将第一行内容写到test中
sed '1r test' passwd #将test中的内容添加到第一行后面
sed 's/test/TEST/'g test #将test中的test换位大写的TEST
NOTE:sed中/可以用@或者#代替
eg:
sed 's#test#TEST#'g test
sed 's@test@TEST@'g test
替换字符位置:
#cat test
three one
sed 's/\(three\)\(.*\)\(one\)/\3\2\1/' test
res:
one three