8

我有一个小 bash 脚本,它使用关键字 greps/awk 段落。

但是在添加了额外的代码之后:set var = "(......)"它只打印一个空行而不是段落。

所以我想问一下是否有人知道如何正确地将awk输出传递到一个变量中进行输出?

我的代码:

#!/bin/sh

set var = "(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop
/logs/Default.log)"
echo $var;

谢谢!

4

5 回答 5

9

使用命令替换来捕获进程的输出。

#!/bin/sh

VAR="$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)"
echo "$VAR"

关于 shell 脚本的一些一般建议:

  • (几乎)总是引用每个变量引用。
  • 永远不要在变量赋值中的等号周围放置空格。
于 2010-09-24T05:00:25.470 回答
3
  • 您需要使用“命令替换”。将命令放在反引号内,`COMMAND`或者放在前面有美元符号的一对括号中$(COMMAND)
  • 要设置一个您不使用的变量set,并且 . 前后不能有空格=

尝试这个:

var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)
echo $var
于 2010-09-24T07:21:19.950 回答
2

你给了我这个杀死一个进程的想法:)。只是铬到你想杀死的任何过程。

尝试这个:

VAR=$(ps -ef | grep -i chromium | awk '{print $2}'); kill -9 $VAR 2>/dev/null; unset VAR;
于 2011-10-08T23:26:54.427 回答
1

每当您看到 grep 通过管道传输到 awk 时,您都可以删除 grep。对于上述情况,

awk '/^password/ {print $2}'

awk 可以轻松替换任何文本命令,如 cut、tail、wc、tr 等,尤其是多个彼此相邻的 grep。IE

grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}.
于 2016-04-23T12:44:03.580 回答
0

在使用打包程序模板变量时,尝试创建一个来自 Vault/Hashicorp 的变量,如下所示:

BUILD_PASSWORD=$(vault read secret/buildAccount| grep ^password | awk '{print $2}')
echo $BUILD_PASSWORD

你可以与grep ^user

于 2016-02-10T17:00:10.053 回答