我正在尝试创建一个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]"
我试图将两条信息拼凑在一起:
以下是文件路径的示例:
/opt/splunk/etc/deployment-apps/TA-XA6x-Server/local/inputs.conf
这是inputs.conf文件内容的一个例子:
[perfmon://TCPv4]
答案 0 :(得分:1)
简单易行的方法是这样的:
#!/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
的{{1}}参数并调整grep
用法适当地:
read