shell - 在 shell 中,如何检查我以前的Linux命令输出的每一行

  显示原文与译文双语对照的内容
0 0

我有一个脚本,在远程计算机中使用ssh运行命令,如下所示:

admin@dear:~/>: mccli checkpoint show
0,23000,CLI command completed successfully.
Tag Time Validated Deletable 
.................. . ...................... . ........ . ...........
cp.20141212170053 2014-12-12 09:00:53 PST Validated No 
cp.20141212170337 2014-12-12 09:03:37 PST No

现在,我必须采取这个输出,并且需要在已经验证列的"" ( 无项目) 中选择标记列中的值。 这样我就可以使用这个标记值执行操作。 第二行没有经过验证的列下的条目。 我将尝试更清楚地输出输出: 在第一行

cp.20141212170053 - 1st column value (under Tag) 
2014-12-12 09:00:53 PST - 2nd column value (under Time) 
Validated - 3rd column value (under Validated) 
No - 4th column value (under Deletable)

我尝试将整个输出放入一个 array 中,并检查。 但是,我不能在这里继续。 我失去了逻辑来完成这个任务。

我如何检测这些线?

时间:原作者:7个回答

0 0

这是执行相同操作的sed版本:

mccli checkpoint show | sed -rne '/^(cp.[0-9]+).*Validated.*$/!{s/^(cp.[0-9]+).*$/1/p}'

/^(cp.[0-9]+).*Validated.*$/ 这里部件搜索从 cp. 开始,包含 Validated 。 使用 ,我们可以在没有 Pattern的行上运行 {s/^(cp.[0-9]+).*$/1/p} 。! 所以实际上下面的行被处理,但它们不是以 cp.[0-9]+ 开始的,所以不。 检查 。有关如何使用sed的信息。

0,23000,CLI command completed successfully.
Tag Time Validated Deletable 
................... ..................... . ........... . ...........
cp.20141212170337 2014-12-12 09:03:37 PST No
原作者:
0 0

你可以使用以下awk命令:

mccli checkpoint show | awk -F ' {2,}' '/PST/&& $(NF-2)!="Validated"{print $1}'
cp.20141212170337
  • 它假定输入字段分隔符为 2或者更多的空格。
  • 由于时间总是在 PST 中,它只检查时区名称。

如果你不想检查值 Validated,那么你也可以使用:

awk -F ' {2,}' '/PST/&& NF<4{print $1}'
原作者:
0 0

我不清楚你是否想要保留标题行,所以我放弃它们。 一些非常简单的解决方案是:

mccli.. . | awk 'NR>6 && NF<6'
mccli.. . | awk 'NR>6 &&!/Validated/'

如果要保留标题行,请将 && 更改为 ||

原作者:
...