如何解决如何从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
更可取
解决方法
使用 sed 进行替换或搜索和删除
sed -i -e 's/Devices//g' filename.txt
Awk解决方案:
cat filename.txt | awk '{print $2 $3 }'
要做你想做的事,我需要更多信息。
,这可能对您有用(GNU sed):
sed -E '/^Devices/{N;s/^\S+\s+(.*\n)Nexus_5_29(_[0-9]+)?\(AVD\) - 10\s+/\1/};P;D' file
如果一行以Devices
开始,则在第二行与所需字符串匹配的情况下,追加下一行并删除这两行的第一列及其关联的空格。
附加的行可能与第二行的条件不匹配,在这种情况下,第一行应正常打印,并重复执行该过程,并替换第二行,因此是P
和{{1}的原因}命令。其他所有行将照常打印。
根据您描述的标准,上述解决方案可能就足够了。但是,如果需要更通用的解决方案,也许?:
D
,
假设您的文件只有空格且没有制表符,则可以删除标题以外的行的前n个字符。
> awk 'NR>1 {$0=substr($0,26)} 1' file
***** Failed tests *****
Class Test
Addition productCalculation
,
在第二行中找到第二个标题的位置并修剪左侧。
$ awk 'NR==2{n=match($0,/ [^ ]/)} {print substr($0,n+1)}' file
***** Failed tests *****
Class Test
Addition productCalculation
假设标头每个都是一个字(不带空格)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。