使用 linux 系统命令(grep、awk、sed)从文件中读取所需的值

To read desired values from file using linux system commands (grep,awk,sed)

我有文件 test.txt 包含一些分配了一些值的变量,我需要读取所有定义的变量,例如 color = 0;。基本上我想在这里阅读的是参数的前一行的值()->getParm(" ");

你能帮我看看如何读取这些值吗?还提到了我的预期结果。

cat test.txt

   color = 0;
   parameters()->getParm(&color, "-color");
   
   width = 16;
   parameters()->getParm(&width, "-width");

   size = 0;
   parameters()->getParm(&size, "-size");

   species = "Taxon";      
   parameters()->getParm(&species, "-species");

   fly = 100;
   parameters()->getParm(&fly, "-fly");

   swim = 25;
   parameters()->getParm(&swim, "-swim");
 

    expected result:
     color = 0;
     width = 16;
     size = 0;
     species = "Taxon";
     fly = 100;
     swim = 25;

我会按照使用 GNU AWK 的方式进行操作,令 file.txt 内容为

   color = 0;
   parameters()->getParm(&color, "-color");
   
   width = 16;
   parameters()->getParm(&width, "-width");

   size = 0;
   parameters()->getParm(&size, "-size");

   species = "Taxon";      
   parameters()->getParm(&species, "-species");

   fly = 100;
   parameters()->getParm(&fly, "-fly");

   swim = 25;
   parameters()->getParm(&swim, "-swim");

然后

awk '/parameters()/{print line}{line=[=11=]}' file.txt

输出

   color = 0;
   width = 16;
   size = 0;
   species = "Taxon";      
   fly = 100;
   swim = 25;

说明:我们需要存储上一行,这样当我们找到符合条件的行时,我们可以print它。我使用变量名 line 来存储它,我指示 awk 对于每一行:如果它确实包含 parameters() print 前一行(存储在变量 line ), 始终将当前行存储为 line。请注意,此解决方案假定带有 parameters() 的行永远不会成为第一行,并且相关行始终紧接在带有 parameters().

的行之前

(在 gawk 4.2.1 中测试)