首页 > 解决方案 > 如何从shell脚本中的字符串中删除单词

问题描述

我想从 shell 脚本中的字符串中删除一个特定的单词。

我的文本文件包含以下数据

***** Failed tests *****
Devices                  Class                Test
Nexus_5_29_2(AVD) - 10   Addition             productCalculation

我想删除DevicesNexus_5_29_2(AVD) - 10

Nexus_5_29_2(AVD) - 10 不是恒定的,它可能会变为Nexus_5_29_1(AVD) - 10Nexus_5_29(AVD) - 10

预期输出为

***** Failed tests *****
Class                Test
Addition             productCalculation

我怎样才能做到这一点?awk更可取

标签: bashshellawksed

解决方案


这可能对您有用(GNU sed):

sed -E '/^Devices/{N;s/^\S+\s+(.*\n)Nexus_5_29(_[0-9]+)?\(AVD\) - 10\s+/\1/};P;D' file

如果一行开始Devices追加下一行,如果第二行与所需的字符串匹配,则删除第一列及其相关的这两行空格。

NB 附加的行可能与第二行的标准不匹配,在这种情况下,第一行应正常打印,并以第二行代替它重复该过程,因此是PD命令的原因。所有其他行将正常打印。

根据您描述的标准,上述解决方案可能就足够了。但是,如果需要更通用的解决方案,也许?:

sed -E '/^Devices/{N;s/^\S+\s+(.*\n)\w+_[0-9]+_[0-9]+(_[0-9]+)?\([A-Z]{3}\) - [0-9]+\s+/\1/};P;D' file

推荐阅读