我有一个包含逗号分隔字符串的文件。字符串可能包含点(即不仅仅是字母数字字符)。这是一个例子:
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
;然后通过忽略所有后续记录来过滤结果Level
(Level
第一个字段中的任何记录都不会有前面的逗号)。
我假设其他文本可以附加到Level1.2
,前提是它不包含Level
字符串。如果事实并非如此,那么您可以使用更简单的方法:
grep '^[^,]*,Level1\.2$' myfile.txt