Grep无法查找shell传过来的变量?
差不多两周前,同事告诉我发现一个诡异的问题,grep 无法搜索 shell 中的变量,着实很惊讶。到他所说的服务器上试了下,还真是不行!
大概就是这样一个要求:
- 有个文本为 userid.txt,里面每一行一个用户 id,类似如下:
1
2
3
4
5
| 0001
0003
0005
0007
0009
|
- 另外还有一个文本为 record.txt,里面是所有用户的操作记录,一行一条,并且包含有 id,类似如下:
1
2
3
4
5
6
7
8
9
| [12 11 2014 11:03,198 INFO] userId:0001 gilettype:3
[12 11 2014 12:12,198 INFO] userId:0002 gilettype:3
[12 11 2014 13:02,198 INFO] userId:0003 gilettype:1
[12 11 2014 14:33,198 INFO] userId:0001 gilettype:3
[12 11 2014 15:13,198 INFO] userId:0002 gilettype:2
[12 11 2014 16:43,198 INFO] userId:0003 gilettype:1
[12 11 2014 17:32,198 INFO] userId:0001 gilettype:3
[12 11 2014 18:16,198 INFO] userId:0002 gilettype:1
[12 11 2014 19:25,198 INFO] userId:0003 gilettype:2
|
用cat命令查看不可见字符
时常,某个程序或软件并没有语法错误,并且你检查它的相关内容也确实没有发现问题。 这是因为你用普通文本编辑器软件来查看的时候,有许多字符没有显示出来,但在终端使用 cat 命令可以很容易地检测出是否存在这些字符。
首先,我们创建一个简单的文本文件,写入一些特殊字符。打开终端,运行命令:
1 printf 'testing\012\011\011testing\014\010\012more testing\012\011\000\013\000even more testing\012\011\011\011\012' > /tmp/testing.txt 现在用不同的编辑器软件打开,显示的结果会不同。用简单的 cat 打开将显示:
1 2 3 4 5 $ cat /tmp/testing.txt testing testing more testing even more testing 如果用 nano 或者 vim 打开,将会看到:
1 2 3 4 testing testing^L^H more testing ^@^K^@even more testing 现在我们给 cat 加上一些选项参数,以便能显示出特殊字符来。
用 cat -T 命令来显示 TAB 键的字符^I
1 2 3 4 5 6 cat -T /tmp/testing.txt testing ^I^Itesting more testing ^I even more testing ^I^I^I 用 cat -E 命令来显示行尾的结束字符$