【发布时间】:2019-02-09 02:43:51
【问题描述】:
我有一个如下所示的文件:
$ cat file_test
garbage text A=one B=two C=three D=four
garbage text A= B=six D=seven
garbage text A=eight E=nine D=ten B=eleven
我想遍历每一行并提取特定的“变量”以在循环中使用。如果一行没有变量,则将其设置为空字符串。
因此,对于上面的示例,假设我想提取变量 A、B 和 C,然后对于每一行,循环将具有以下内容:
-
garbage text A=one B=two C=three D=four-
A= "一个" -
B= "两个" -
C= “三”
-
-
garbage text A= B=six D=seven-
A= "" -
B= “六” -
C= ""
-
-
garbage text A=eight E=nine D=ten B=eleven-
A= “八” -
B= “十一” -
C= ""
-
我最初的计划是使用sed,但这不起作用,因为“变量”的顺序不一致(例如最后一行)并且可能缺少“变量”(例如第二行)。
我的下一个想法是逐行浏览,然后使用awk 将行拆分为字段并根据每个字段设置变量,但我不知道从哪里开始或如何开始。
我愿意接受其他想法或更好的建议。
【问题讨论】:
-
好的...一旦你做了变量,然后呢?你至少应该表现出你的努力。
-
我还没有走到那一步。我不知道如何提取变量。
-
@IMTheNachoMan,从您的帖子中,我了解到您需要获取字符串的值并将它们用作您进一步任务的 shell 变量,对吗?或者您想简单地打印它们的值?
-
@IMTheNachoMan :如果您真的想在 bash 中执行此操作(IMO 由 tshiono 发布的 Perl 解决方案更具吸引力),我会使用嵌套循环:外部循环遍历行。内部循环遍历要提取的变量。使用 bash 正则表达式来提取相应变量的值。如果变量不存在,则将其设置为空。
-
(Off topic) 看到这些答案后,我觉得这个问题有资格迁移到PCG。