我有一个名为“hello.txt”的文本文件,其中包含以下两行:
Hello WORLD!
Hallo world!
当我写下下面的内容时
grep -i h[ae]llo hello.txt
在终端中,没有任何输出。我期望打印出两行。
答案1
某种字符集问题可能会导致你无法正常工作。您应该能够使用以下一些命令来重新创建成功的用法,grep
这可能会对您有所帮助。
首先让我们在终端中创建一个文本文件以避免任何字符集问题:
echo -e "Hello\nHallo" > foo.txt
该-e
标志告诉echo
我们希望\n
将 解释为换行符,而不是文字序列。这给了我们两条线。您应该能够cat
毫无问题地访问该文件并查看它,如下所示:
cat foo.txt
Hello
Hallo
现在您可以使用grep
之前发布的命令(它实际上不需要引号,但您应该使用它们,因为 bash 中有特殊字符。此外,单引号而不是双引号)
grep -i 'h[ae]llo' foo.txt
这会产生预期的结果。如果这对您有用,但您对其他文本文件发生了什么感到好奇,您可以执行一些操作来弄清楚发生了什么。
首先,尝试file
对文件运行命令。这应该告诉您这是一个文本文件,以及它的编码方式。
file foo.txt
foo.txt: ASCII text
如果你得到一些奇怪的东西或者不同的字符编码,这将是一个问题。您还可以通过以下方式检查文件的十六进制转储:
十六进制转储-C foo.txt
00000000 48 65 6c 6c 6f 0a 48 61 6c 6c 6f 0a |Hello.Hallo.|
0000000c
另外,这里还有一个浏览器内的 Linux 模拟器,您可以使用它来帮助您玩转:
它甚至还有 GCC,因此您可以编译 C 代码!