如何从第二列开始搜索字符串

如何从第二列开始搜索字符串

我有一个包含逗号分隔字符串的文件。字符串可能包含点(即不仅仅是字母数字字符)。这是一个例子:

site1.com,Level1.2
site2.com,Level1.1,Level1.0,Level1.2
site3.com,Level1.2
site4.com,Level1.2,Level1.1,Level1.0,Levelv3
siteLevel1.2,Levelv2
Level1.2,Levelv2

我需要搜索站点名称(请注意,我没有站点名称的特定格式,即它并不总是以 .com 结尾,所以我不应该考虑第一列是什么样子)

我需要以下网站仅有的包含特定字符串。在此示例中,Level1.2 (没有 Level1.1 也没有 Level1.0 也没有 Level3之前或之后)。然后将符合条件的结果打印到新文件中(仅包含 Level1.2)。因此搜索关键词从第二列开始(我不想要在站点名称中找到匹配模式的搜索结果)。

因此,如果我搜索 Level1.2,新文件应该包含:

site1.com,Level1.2
site3.com,Level1.2

但我的命令导致:

site1.com,Level1.2
site3.com,Level1.2
siteLevel1.2,Levelv2
Level1.2,Levelv2

如果某个站点的名称中包含 Level1.2,则不应将其计算在内,因为我不关心第一列。

我试过这个命令,它对我有用。唯一的问题是我需要搜索忽略第一列中出现的搜索字符串。

awk '/Level1.2/ && !/Level1.1/ && !/Level1.0/ !/Level3/' myfile.txt > result.txt

答案1

您可以尝试这个awk

awk -F, '$2=="Level1.2" && NF==2' myfile.txt

输入分隔符设置为,。该命令打印包含 2 个字段的行,其中第二个字段具有匹配的字符串。

答案2

以下工作:

grep '^[^,]*,Level1\.2' myfile.txt | grep -v ',Level.*Level'

这将跳过第一个字段及其尾随的逗号,然后查找匹配项Level1.2;然后通过忽略所有后续记录来过滤结果LevelLevel第一个字段中的任何记录都不会有前面的逗号)。

我假设其他文本可以附加到Level1.2,前提是它不包含Level字符串。如果事实并非如此,那么您可以使用更简单的方法:

grep '^[^,]*,Level1\.2$' myfile.txt

相关内容