grep在屏幕上高亮显示,但不显示';t重定向到输出

grep在屏幕上高亮显示,但不显示';t重定向到输出,grep,Grep,我正在使用带-f选项的grep $grep -f pattern_list.txt data.txt 在屏幕上,我看到整个data.txt和屏幕上突出显示的匹配模式(来自pattern_list.txt文件)。所以我相信搜索是可以的。但是我只想得到pattern_list.txt中带有模式的那些行,而不是带有一些突出显示的整个文件 这是因为当我试图将结果存储在单独的文件output.txt中时,我得到了data.txt的副本!!这是一致的:无论我在屏幕上得到什么结果,都会被传输到output

我正在使用带-f选项的grep

$grep -f pattern_list.txt data.txt 
在屏幕上,我看到整个data.txt和屏幕上突出显示的匹配模式(来自pattern_list.txt文件)。所以我相信搜索是可以的。但是我只想得到pattern_list.txt中带有模式的那些行,而不是带有一些突出显示的整个文件

这是因为当我试图将结果存储在单独的文件output.txt中时,我得到了data.txt的副本!!这是一致的:无论我在屏幕上得到什么结果,都会被传输到output.txt,高光会丢失。在任何情况下,我都对过滤输出感兴趣,只对模式匹配而不突出显示的行感兴趣

我尝试了两个重定向,结果相同=>

$grep -f pattern_list.txt data.txt > output.txt

$grep -f pattern_list.txt data.txt >> output.txt
我不认为这是相关的,但我使用的是LinuxMint

/*********************/ Jotne要求提供示例文件。 原始文件太大了。我也不确定我能不能 共享内容(它们是公开的,并且 不是商业用途,但谁知道)所以我给你 版本

*我已经检查了行为是否与编辑版本相同

这些是股票名称/代码和相关数据。 两组不同的信息位于不同的文件中。 一组较小,另一组较大。 我从较小的小组中取出了姓名,需要 其他文件中这些股票的相应数据

*我认为这与grep的报告方式有很大关系- 突出显示与在结果中仅给出这些行 而不是这些特定的文件。但这里有 不管怎样,举个例子

pattern_list.txt(每个名称后面都有一个空格)

data.txt

20MICRONS EQ 34.4 34.45 33 33.55 33.4 33.65 77560 2615090.75  604 144J01027 
3MINDIA EQ 4802.35 4900 4721 4845.95 4899 4879.05 363 1750264.35  126 470A01017 
8KMILES EQ 166.05 182 166.05 177.2 174.95 172.15 2155 381502.85  58 650K01013 
A2ZMES EQ 26.3 26.3 26.3 26.3 26.3 25.05 206927 5442180.1  280 619I01012 
AARTIDRUGS EQ 529.15 553.8 509.85 531.9 534.55 529.05 12118 6394851.8  852 767A01016 
AARTIIND EQ 215 218.7 203.1 206.35 203.2 214.85 210984 44316179.1  3499 769A01020 
AARVEEDEN EQ 45.15 49.25 45.1 47 46.45 46.35 3356 157493.35  131 273D01019 
ABAN EQ 815 825 715 736.65 732 809.25 5633124 4204164243.15  154066 421A01028 
ABB EQ 1048.6 1094 1033.45 1062.55 1056.15 1050.6 99591 105627217.75  3025 117A01022 
ABBOTINDIA EQ 2130.05 2189 2101.05 2131.3 2102 2184.3 1354 2915165.8  255 358A01014 
ABCIL EQ 202 209.85 195 201.85 199.05 202.85 28103 5702324.45  998 605B01016 
ABGSHIP EQ 257.1 264 250 258.7 257.3 259.65 61733 15948215.4  2225 067H01016 
ABIRLANUVO EQ 1330 1400.95 1323.2 1370.15 1366.75 1330.85 265037 362100560.5  16500 069A01017 
ACC EQ 1435.1 1487.8 1411 1458.5 1458 1435.55 299862 435694414.85  20261 012A01025 
ACCELYA EQ 701 721 700.1 705.3 703 705.35 11215 7949589.8  906 793A01012 
ACE EQ 28.1 29.45 27.45 28.75 28.9 28.05 543699 15821414.15  1272 731H01025 
ACROPETAL EQ 3.9 4 3.8 4 4 3.9 51927 202669.1  88 055L01013 
ADANIENT EQ 444.1 468.9 423.8 444.55 439.1 444.05 3930067 1762074365.95  62256 423A01024 
ADANIPORTS EQ 267.25 285.4 252.35 270.3 271.05 264.9 9128261 2454070463.55  87896 742F01042 
ADANIPOWER EQ 58.05 62 56.3 59.5 59.45 57.7 20394362 1210636361.9  54378 814H01011 
ADFFOODS EQ 60.15 64.9 58.55 62.9 62.5 62 84037 5233103  1115 982B01019 
ADHUNIK EQ 50.2 52 49.4 50.45 49.9 50.7 115288 5841753.15  815 400H01019 
ADSL EQ 20.75 21.75 20 21.25 21.3 20.75 29963 632240.4  186 102I01027 
ADVANIHOTR EQ 44 46 43 44.05 44.95 45.5 348 15350.8  18 199C01026 
AEGISCHEM EQ 243.95 256.9 239 244.15 242.95 244 35887 8835424.65  1511 208C01017 
AFL EQ 46.5 46.65 44.75 45.85 45.8 47 2738 125420.4  23 020G01017 
/********************/

编辑2:我不知道为什么,但在描述中,这些行是一堆的。在这里的编辑窗口中,它看起来很完美。这可能是个线索吗?跟换行符有关吗

/***********************/

编辑3: 多亏了佩雷尔的编辑,我上面的“编辑2”评论得到了处理,行看起来是分开的。一个建议是检查grep是否将该文件理解为一行(就像在这里看到的编辑2次时一样聚集在一起)。因此,我执行了一个基本的grep-e,如下所示:

$grep -e ACC data.txt 
我喜欢下面两行:

ACC EQ 1435.1 1487.8 1411 1458.5 1458 1435.55 299862 435694414.85  20261 012A01025 
ACCELYA EQ 701 721 700.1 705.3 703 705.35 11215 7949589.8  906 793A01012  
因此,我认为grep会在-e选项下逐行查看文件。仅供参考,ACC在屏幕上的两个实例中都突出显示。重定向(>)到temp.txt也成功。只有在-f选项下,grep才会抛出屏幕上突出显示的匹配模式和重定向中的副本的所有内容

最后一件事,(现在!)是grep-f输出的完整文件是一行一行的,而不是一堆:在屏幕上以及重定向中。谢谢

/***********/

编辑4:

纯粹是因为时间紧迫,我刚取了pattern_list.txt并添加了:

grep -w 
在每行和每行之前

data.txt >> output.txt 
每行之后

将其保存为.sh文件,更改权限u+x并运行脚本。 没有循环,没有条件,什么都没有。悲哀

如果可能的话,我当然想理解并解决grep-f难题。 此外,关于各种文本格式的一些指针也会有所帮助。 因为当我将输出移植回LO Calc并向其中添加另一个信息文件时,
我能“看见”两个相同的列,但如果我比较它们,一些对应的单元格被视为相同的,但一些不相同。但是那些Que和exmpls在其他时间/地点显示。我认为这一切都与软件/应用程序/命令如何查看和处理文本以及如何向用户显示文本有关。谢谢。

出于我不知道的原因,以下命令起作用直接的。 仅供参考

$fgrep -f pattern_list.txt data.txt 
不是“grep”,而是“fgrep”。
感谢您的兴趣和时间。

发布文件(或示例数据),然后我们可以尝试解决此问题。当您复制粘贴此问题中的数据而不是原始文件时,是否会发生这种情况?grep可能将数据视为一行。@perreal这是一个很好的指针:“…grep可能是…单行。”但我不知道为什么,也不知道如何纠正。在发布您的编辑后,我的问题看起来和预期的一样。谢谢。您是如何知道换行符在屏幕上看到的(之前)一堆中应该放在哪里的?!您是如何分隔这些行的?我使用gedit(v3.3.3)原始打开了data.csv文件,并以txt格式存储。我可以“grep-e”并将select行重定向到form data.txt,我使用LibreOffice calc(v4.1.2.3)col cp并粘贴到gedit for pattern_list.txt中,然后我在这里的编辑窗口中从文件和cp pstd中剪下了底部98%。选择文件内容并在编辑窗口中按cntl+k。这使其成为代码,因此它保留了间距。Hmmm…因此这是一个解释问题…无论ctrl+k在内部执行什么操作都会很困难(对我来说)抓取…如何告诉grep做这件事希望会容易得多…谢谢Swell,
fgrep
grep-F
,站在
-F
代表“将模式解释为固定字符串列表”。谢谢你的兴趣和时间。就在尝试感谢你的兴趣和时间之前。我读过“fgrep-F”是“grep-F”与相关的手册页描述。因此,在尝试“fgrep-f”之前,我尝试了“grep-f”,但它不起作用。现在,看到您的评论,我再次尝试了一些事情,事实上,“grep-Ff pattern_list.txt data.txt”可以正常工作。我的解释是“grep-f”查找由换行符分隔的模式,然后-f加法进一步指示命令在接下来指定的文件中查找这些模式。我的“未知原因”指的是突出显示的o/p,而不过滤这些行。注意,
$fgrep -f pattern_list.txt data.txt