在 bash 脚本中重新格式化 grep 的名称/内容对



我正在尝试创建一个bash脚本,该脚本将为两个单独的数据片段grep单个文件,并将它们打印到stdout。

到目前为止,这就是我所拥有的:

#!/bin/sh
cd /my/filePath/to/directory
APP=`grep -r --include "inputs.conf" "[" | grep -oP '^[^/]+'`
INPUT=`grep -r --include "inputs.conf" "[" | grep -oP '[[^]]+'`
for i in $APP
do
{cd /opt/splunk/etc/deployment-apps
 INPUT=`grep -r --include "inputs.conf" "[" | grep -oP '[[^]]+'`
 echo -n "$i | $INPUT"}
done
echo "";
exit

这给了我一个输出,打印第一个命令的整个输出(大约 200 行),然后是一个|,然后是第二个命令的另一个结果。我想我可以创建一个数组来做到这一点,但我仍在学习 bash。

这是命令的输出示例,没有管道到 grep:

TA-XA6x-Server/local/inputs.conf:[perfmon://Processor]

一次执行中有 200+ 个这样的,我希望将格式打印成这样的东西

app="TA-XA6x-Server/local/inputs.conf:" | input="[perfmon://Processor]"

基本上,我试图将两条信息拼接在一起:

  1. 文件的文件路径
  2. 文件本身的内容(输入)

下面是文件路径的示例:

/opt/splunk/etc/deployment-apps/TA-XA6x-Server/local/inputs.conf

这是inputs.conf文件内容的示例:

[perfmon://TCPv4]

简单,主要是工作的方法如下:

#!/bin/bash
while IFS=: read -r name content; do
  printf 'app="%s" | input="%s"n' "$name" "$content"
done < <(grep -r --include "inputs.conf" "[")

如果您需要可靠地处理所有可能的文件名(包括带有冒号或换行符的名称)并让 GNU grep 可用,请考虑--null参数进行grep并适当调整read用法:

#!/bin/bash
while IFS= read -r -d '' name && IFS= read -r content; do
  printf 'app="%s" | input="%s"n' "$name" "$content"
done < <(grep -r --null --include "inputs.conf" "[")

相关内容

  • 没有找到相关文章

最新更新