2012-01-14 60 views
2

采取格局我有一个模式文件,说t.txt,包含以下内容:的grep不从文件

vali 

,我想在其上运行的grep的文件,说一个,含以下:

validate 
validate: 

bw_validate: 
[echo] Validating project: CrossService_v1_59_5_1 
[echo] Found 62 errors and 28 warnings 
[echo] ----------------------------------------------------------------- 
[echo] Validating project: CRM-UDB_59_4_2 
[echo] Found 25 errors and 28 warnings 
[echo] ----------------------------------------------------------------- 
[echo] Validation Failed: At least one project contains errors. 

notify: 

BUILD FAILED 
bw.xml:311: Validation Failed: At least one project contains errors. 

如果我执行:

grep -iE vali a 

我得到预期的输出,即:

validate 
validate: 
bw_validate: 
[echo] Validating project: CrossService_v1_59_5_1 
[echo] Validating project: CRM-UDB_59_4_2 
[echo] Validation Failed: At least one project contains errors. 
bw.xml:311: Validation Failed: At least one project contains errors. 

,但如果我执行:

grep -iE -f t.txt a 

我没有得到任何比赛。 文件是可读的,并且都在相同的目录中(我从中执行该命令)。 我试着用-f和--file = t.txt,--file ='t.txt',--file =“t.txt”

我在Linux上Fedora 16 64bit。奇怪的是,同样的命令在grep/egrep移植的窗口中正常工作。

我错过了什么吗? 任何帮助表示赞赏,因为这是给我的头痛:( 感谢!

+1

能否请您做'猫-vet t.txt'。看起来你的模式文件可能包含一些“空格”或“特殊字符”。 – 2012-01-14 18:25:42

+0

你是对的,它显示了一些额外的^ M在行结束之前。用dos2unix转换它解决了它。 – Daniele 2012-01-15 10:09:00

+0

酷,我发布了一个答案只是为了引用incase,如果你碰巧在没有'dos2unix'可用的系统上工作。祝你好运!! – 2012-01-15 10:36:32

回答

4

它应该工作的权利(我的作品),由POSIX指定的-f开关。

,你说这是事实在Windows上工作给了我一个想法:难道是t.txt文件以DOS换行符结束?我用一个干净的文件(没有换行符)尝试它,并且它工作。然后我用DOS文件尝试它,我能够再现你的结果

尝试dos2unix来“修复”DOS文件。

1

如果您没有dos2unix实用程序,则可以执行以下任一操作,将DOS或Windows换行符转换为Unix换行符。

  1. 该一衬垫假设所有行与CR+LF(回车+换行)结束

    sed -i 's/.$//' filename 
    
  2. 可以通常逐字地在命令行上由第一按压Ctrl-v进入^M控制焦炭(控制键+ v键),然后Ctrl-m。  的sed -i 's/^ M $ //' 文件名

  3. 这下面的一行假设我们使用GNU sed。 CR的十六进制值是0x0D。

    sed -i 's/\x0D$//' filename