grep

  1. # 文件中查找
  2. grep [-cinvABC] 'word/regex' filename
  3. # 目录中查找
  4. grep -r 'word/regex' ./folder

-c :打印符合要求的行数
-i :忽略大小写
-n :在输出符合要求的行的同时连同行号一起输出
-v :打印不符合要求的行
-A :后跟一个数字(有无空格都可以),例如 A2则表示打印符合要求的行以及下面两行
-B :后跟一个数字,例如 B2 则表示打印符合要求的行以及上面两行
-C :后跟一个数字,例如 C2 则表示打印符合要求的行以及上下各两行

-r:目录中递归查找

egrep

egrep = grep -E
可与ls连用,来过滤文件

分步解析命令

  1. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"|tail -n 1|awk -F ' ' '{print $2}'|sed 's/.$//'

1. ls

  1. aws s3 ls s3://tmes-ci/tmes-deployment/

在这条命令中,ls列出所有目录
image.png

2. ls + egrep

  1. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"

在列出的这些目录中,过滤出由5个数字作为文件名的目录。
image.png

3. ls + egrep + tail

  1. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"|tail -n 1

找出由数字作为文件名的所有目录后,取出最后一行。
tail -n number:表示取出最后number行。
image.png

4. ls + egrep + tail + awk

  1. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"|tail -n 1|awk -F ' ' '{print $2}'
  2. # 或者
  3. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"|tail -n 1|awk '{print $2}'

取出最后一行后,以空格为分隔符,将其切片,然后取出第二个切片, 即 10346/。
image.png
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk工作流程是这样的:
读入有’\n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域。
$0则表示所有域
$1表示第一个域
$n表示第n个域。
默认域分隔符是”空白键” 或 “[tab]键”。可以通过 -F 指定分隔符。

5. ls + egrep + tail + awk + sed

  1. aws s3 ls s3://tmes-ci/tmes-deployment/|egrep "[0-9]{5}"|tail -n 1|awk -F ' ' '{print $2}'|sed 's/.$//'

最后用sed命令把行尾的/和换行符替换掉。
image.png
.$是删除\n之前的最后一个字符 、因为.代表除了\n之外所有的字符

  1. sed 's/要被取代的字串/新的字串/g'