Grep 不工作(对某些文件)?

Grep 不工作(对某些文件)?

我有一个 MSSQL 数据库转储,想用 grep 来查看。但是,grep 似乎根本无法处理它。以下是该文件的片段。

...
    ALTER DATABASE [Documents] SET RECURSIVE_TRIGGERS OFF
    GO
    ALTER DATABASE [Documents] SET  DISABLE_BROKER
    GO
    ALTER DATABASE [Documents] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
...

然而,当我对它进行 grep 时,却没有任何结果。

$ cat Documents.sql | grep -i 'alter'
$ <nothing>
$ cat Documents.sql | grep -i 'go'
$ <nothing>

为了好玩,我创建了另一个文档“tempfile”,其中包含:

$ cat tempfile 
alter

Alter

ALTER
$

并对其运行相同的 grep:

$ cat tempfile | grep -i 'alter'
alter
Alter
ALTER

有没有想过为什么 grep 无法处理某些文件?我担心当我必须 grep 一大堆东西来寻找一个小块时,它“可能”会丢失一些东西。有什么想法吗?

答案1

啊哈。谢谢。

$ file -bi Documents.txt
text/plain; charset=utf-16le
$ vi Documents.txt

set encoding=utf-8
set fileencoding=utf-8

$ file -bi Documents.txt
text/plain; charset=utf-8
$ cat Documents.txt | grep -i 'alter'
ALTER DATABASE [Documents] SET COMPATIBILITY_LEVEL = 120
ALTER DATABASE [Documents] SET ANSI_NULL_DEFAULT OFF 
ALTER DATABASE [Documents] SET ANSI_NULLS OFF 
ALTER DATABASE [Documents] SET ANSI_PADDING OFF

答案2

我在数据库转储时遇到了同样的问题。另一种解决方案是使用 设置编码,vi对我有用。

我更喜欢使用dos2unix命令,而且它也能很好地工作。

相关内容