在我的脚本上,执行特定命令后,我需要匹配两个单词。 我需要仔细研究 karaf-ids 和 DEPLOYED
我使用了grep -F
,但它与第一个单词和第二个单词不完全匹配
#helm ls
NAME REVISION UPDATED STATUS CHART NAMESPACE
cantankerous-abalone 1 Mon Sep 3 14:54:53 2018 FAILED karaf-0.0.215 karaf
hissing-albatross 1 Mon Sep 3 14:57:14 2018 FAILED karaf-0.0.215 karaf
karaf-ids 1 Thu Sep 20 08:18:28 2018 DEPLOYED karaf-ids-0.0.339 karaf-ids
我继续寻找解决方案...
答案 0 :(得分:1)
awk '$1 == "karaf-ids" && $8 == "DEPLOYED"'
打印符合这些条件的任何行。如果这不是您想要的,例如,添加诸如{ print $3, $4, $5, $6, $7 }
之类的内容以仅打印日期。
答案 1 :(得分:0)
您可以执行以下操作:
<the-command-that generated given output > | awk 'BEGIN {printf "%-25s
%s\n", "NAME", "STATUS"} {if (NR != 1) {printf "%-25s %s\n", $1, $8}}'
这将生成如下输出:
NAME STATUS
cantankerous-abalone FAILED
hissing-albatross FAILED
karaf-ids DEPLOYED
答案 2 :(得分:0)
这不是做这份工作吗?
grep '^karaf-ids\s.*\sDEPLOYED\s'
答案 3 :(得分:0)
如果您需要将两个单词(单词1和单词2)与grep
进行匹配,则有2种选择:
如果单词顺序已知:
$ grep word1.*word2 file
或者如果订单未知:
$ grep word1 file | grep word2
在您的情况下,它们都可以工作。
如果要使用单词列表从文件(grep -F
中进行搜索,则不能使用grep
,请使用awk:
$ awk '
NR==FNR {
a[$0]
next
}
{
for(i in a)
if($0!~i)
next
}1' list file
输出数据:
karaf-ids 1 Thu Sep 20 08:18:28 2018 DEPLOYED karaf-ids-0.0.339 karaf-ids
对于部分匹配,所有解决方案都将失败。
答案 4 :(得分:0)
我没有使用第一个grep,因为如果我编写示例并进行示例,它将找到两者。而且我不想要,所以我使用awk
helm ls | awk "/(^| )$CHART_NAME( |$)/" |grep DEPLOYED
使用下面的命令,它将仅找到带有$ CHART_NAME和DEPLOYED的行