bash - 如何从shell脚本中的字符串中删除单词
问题描述
我想从 shell 脚本中的字符串中删除一个特定的单词。
我的文本文件包含以下数据
***** Failed tests *****
Devices Class Test
Nexus_5_29_2(AVD) - 10 Addition productCalculation
我想删除Devices
和Nexus_5_29_2(AVD) - 10
Nexus_5_29_2(AVD) - 10
不是恒定的,它可能会变为Nexus_5_29_1(AVD) - 10
或Nexus_5_29(AVD) - 10
预期输出为
***** Failed tests *****
Class Test
Addition productCalculation
我怎样才能做到这一点?awk
更可取
解决方案
这可能对您有用(GNU sed):
sed -E '/^Devices/{N;s/^\S+\s+(.*\n)Nexus_5_29(_[0-9]+)?\(AVD\) - 10\s+/\1/};P;D' file
如果一行开始Devices
追加下一行,如果第二行与所需的字符串匹配,则删除第一列及其相关的这两行空格。
NB 附加的行可能与第二行的标准不匹配,在这种情况下,第一行应正常打印,并以第二行代替它重复该过程,因此是P
和D
命令的原因。所有其他行将正常打印。
根据您描述的标准,上述解决方案可能就足够了。但是,如果需要更通用的解决方案,也许?:
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
推荐阅读
- rust - 我可以在 Rust 的全局状态中使用迭代器吗?
- python - 在已经处于循环中的循环中使用 tqdm
- python - 我认为如何设置相对路径?
- spring - JOIN FETCH 不能用多对多关系构建
- sequelize.js - Sequelize 多对多关联 --- SequelizeEagerLoadingError: "User is not associated to User!"
- snowflake-cloud-data-platform - Snowflake throwing random 没有足够的权限在桌子上进行操作
- ruby - 如何通过命令行获取 Ruby 类中定义的方法的详细列表?
- grouping - 向数据框添加更大的 MultiIndex
- python - 如何在 python 中使用带有 cat << EOF> 的子进程运行
- java - 正则表达式不工作 - 过滤 Splunk 结果