grep 脚本 - 同时输出行到 echo

grep 脚本 - 同时输出行到 echo

我想改进我制作的一个简单脚本。

虽然它对于单个参数运行良好并且可以完成我想要的操作,但我遇到了一些问题,使其对于我的所有参数值并行或同时运行。我想改进它以在多个参数上运行并同时输出我的 grep 结果而不是按顺序,但这不是好的选择吗?任何使此输出工作的帮助将不胜感激。非常感谢。

  • 我有多个文件 file1.log file1.txt file2.log file2.txt
  • 需要从 *.log 和 *.txt 中 grep 一些内容
  • 将所有参数的 grep 行输出到同一个 echo 中。

到目前为止我的脚本看起来像这样:

#!/bin/bash

filename=$@



error=$(grep  'ERROR' ${filename}.l)
phone=$(grep 'phone'  ${filename}.e)
invalid=$(grep  'invalid' ${filename}.l)

while true ; do 

echo -e  " Start of message \n :  
         $error \n
         $invalid \n
        $phone \n
          End of message \n "

break 
done 
exit

这就是我希望输出的样子

Start of message 

error form  file1
Phone number from file1
Invalid from file1

error form  file2
Phone number from file2
Invalid from file2

error form  file3
Phone number from file3
Invalid from file3 

etc 

End of message 

答案1

$@ 是一个数组而不是字符串,因此您真正想要做的是使用循环来迭代数组。尝试这个:

#!/bin/bash
for filename in "$@"; do
   error=$(grep  'ERROR' "${filename}.l")
   phone=$(grep 'phone'  "${filename}.e")
   invalid=$(grep  'invalid' "${filename}.l")
   echo -e  " Start of message \n :
      $error \n
      $invalid \n
      $phone \n
      End of message \n "
done 
exit 

答案2

echo "Start of message "

for file in "$@"
do

error=$(grep  'ERROR' ${file}.l)
phone=$(grep 'phone'  ${filee}.e)
invalid=$(grep  'invalid' ${file}.l)

echo -e  "${error} from ${file}\n ${phone} from ${file}\n  $invalid from ${file}\n\n"

done
echo -e "End of message \n"

相关内容