使用 grep 过滤器

使用 grep 过滤器

我有一个名为“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 模拟器,您可以使用它来帮助您玩转:

http://bellard.org/jslinux/

它甚至还有 GCC,因此您可以编译 C 代码!

相关内容