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