我有一个 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
命令,而且它也能很好地工作。