Wargames与bash知识05

Wargames与bash知识05

Bandit Level 8

grep 常用选项:
-E 等同于egrep命令,支持扩展正则表达式
-i 忽略大小写
-v 取反。匹配结果的反集

正则表达式入门知识:

正则表达式主要依赖于元字符,元字符都有特殊的含义,一些元字符写在方括号中的时候有一些特殊的意思。 以下是一些元字符的介绍。
“^” 与 “$”,锚定符。”^"行首,如’^ABC’代表匹配以ABC开头的行;$行尾,如’ABC$',grep代表匹配以ABC结尾的行。

. 匹配任意一个字符,不包含换行。
[ ] 字符集,匹配[ ]中的任一字符。
[^ ] 字符集的补集,不包含在字符集中的任何一个字符。
量词:“?”、“+”、“*” 。量词的效果作用于它前面的单元,单元可以是单个字符或者字符串。如boo?k,匹配book、bok,?的作用是0出现0次或一次。
? 匹配前面单元0到1次
+ 匹配前面单元1到无数次
* 匹配前面单元0到无数次
{n,m},中括号[ ]字符集的量词。如[gu]{1,3}:g或者u至少出现一次,最多出现三次。
{ ,m}是匹配前面单元0到m次 ,最多出现m次;
{n, }匹配前面单元n到无限次,最少出现n次。
(xyz),小括号括起来的字符串为一个整体单元处理。正则处理文本是逐行逐个字符处理的,小括号作用是将字符串按一个整体处理。
| 或, (abc|xyz)匹配为abc或者xyz。
\ 转义元字符:[ ] ( ) { } . * + ? ^ $ \ |,使其去除特殊含义,恢复字面意义。

使用grep命令前有一些注意事项:
1、最好使用egrep或者grep -E以防止扩展正则未开启而造成的困扰。
2、正则表达式最好使用单引号 ’ 括起来,防止特殊符号被shell解释。
3、最好开启grep和egrep颜色显示。查看grep和egrep是否开启颜色显示,开启颜色匹配会用颜色标识出匹配项。

gyj@DESKTOP-S52KD5S:~/xue$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'

使用文本编辑器建立一个演示文件,内容如下:

gyj@DESKTOP-S52KD5S:~/xue$ cat zhengze.txt
bok book books booookes
boss kill you
boss killl uouyou
boss love you
bossbossboss love kill yoou
you lovekill boos
这是一些没有意义文字
一些一些文字文字

下面是一些grep演示
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上图中有两行grep命令没有输出(也就是没找找到匹配项),你能找到没有正确匹配的原因吗?

下面开始解题:
关卡提示:data.txt唯一没有重复的行
推荐命令:grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

先查看uniq命令帮助:
gyj@DESKTOP-S52KD5S:~/xue$ uniq --help
用法:uniq [选项]… [文件]
……
必选参数对长短选项同时适用。
……
-u, --unique 只输出不重复(内容唯一)的行
……
若域中为先空字符(通常包括空格以及制表符),然后非空字符,域中字符前的空字符将被跳过。

提示:“uniq” 不会检查重复的行,除非它们是相邻的行。
您也许需要事先对输入排序,或使用 “sort -u” 而非 “uniq”。
另外,比较操作将服从 “LC_COLLATE” 环境变量所指定的规则。

(上面unip --help输出有删减)

您对帮助中描述“您也许需要事先对输入排序,或使用 “sort -u” 而非 "uniq"怎么看?获取唯一行是使用sort -u 还是sort | uniq -u呢?下面咱们就设计一个实验辨识一下。
首先,使用文本编辑器建立一个文件

gyj@DESKTOP-S52KD5S:~/xue$ cat sort_uniq.txt
这是第一行1
这是第一行1
这是第一行1
这是第一行2
这是第一行2
这是唯一行1
这是第一行3
这是第一行3

使用 sort -u命令

```bash
gyj@DESKTOP-S52KD5S:~/xue$ sort -u sort_uniq.txt
这是第一行1
这是第一行2
这是第一行3
这是唯一行1

使用sort |uniq -u

gyj@DESKTOP-S52KD5S:~/xue$ sort sort_uniq.txt |uniq -u
这是唯一行1

从演示不难看出sort -u 给文档进行排序且将重复的行改变为一行输出。sort排序然后uniq -u处理输入的是唯一行,真好符合题目要求。

bandit8@bandit:~$ sort data.txt |uniq -u
EN632PlfYiZbn3PhVK3XOGSlNInNE00t

## Bandit Level 9

关卡提示:data.txt的少量的人类可读的信息中,特征是前面有几个等号“=“。
推荐命令:grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

按顺序是不是该strings了?这个命令以前看Linux运维的书籍没有见过,先看看帮助。

gyj@DESKTOP-S52KD5S:~/xue$ strings --help
用法:strings [选项] [文件]
 打印 [文件] (默认为标准输入) 中可打印的字符串
……

至此,应该已经答题了:strings输出人类可读字符串,grep查找开头有三个=的字符串(几个应该是大于等于三吧)

```bash
   bandit9@bandit:~$ strings data.txt |grep -e  ‘^===’
   ========== passwordk^
   ========== is
   ========== G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s