在Mac上,我想使用pmset确定是否存在任何睡眠断言。如果有,只提取该信息并省略不必要的信息。
如果grep没有返回任何内容我想要打印“Nothing”。
if pmset -g | grep pre ; then pmset -g | grep pre | cut -d'(' -f2 | cut -d')' -f1 ; else printf "Nothing\n" ; fi
问题是打印了第一个grep结果,格式化的结果也是如此。例如,如果正在进行备份,这就是我得到的结果:
睡眠15(通过备份阻止睡眠)
备份
阻止睡眠
我不想要第一行,并想丢弃它。我只想打印第二行(“备份时阻止睡眠”)。
如果grep结果为空,我想用文本“Nothing”表示。上面的脚本可以正常工作。
可能有更多优雅的解决方案,但我一直在寻找一个。
答案 0 :(得分:3)
如果我理解你的问题,你只需丢弃第一个grep
的输出,而不管它提供的输出。如果是这样,那么您可以使用grep。
-q
选项
来自'grep'的手册页:
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was
detected. Also see the -s or --no-messages option. (-q is specified by POSIX.)
这样的事情:
if ifconfig | grep -q X; then
ifconfig | grep Mi | cut -d'(' -f2
else
printf "Nothing\n"
fi
显然在上面的例子中,ifconfig的输出不会每次都改变。仅用作例子。 ;)
答案 1 :(得分:0)
这可能更简洁一些。它grep
仅使用grep -o
输出与模式匹配的行的部分而不是整行:
#!/bin/bash
SLEEP=$(pmset -g | grep -o "sleep prevented.*[^)]")
if [ -z "$SLEEP" ]; then
echo Nothing
else
echo $SLEEP
fi
模式为sleep prevented
,遇到任何字符,直到遇到)
。