如何移除文件中以特定后缀结尾的行并合并剩余内容为单行?
解决方案
现有文件file.txt内容如下:
projectA-app1 projectA-app2 projectA-app-mobile projectB-app1
原本的命令是把所有应用名合并为单行,但现在需要移除所有以-mobile结尾的应用,以下是几种实用实现方式:
方法一:grep过滤后合并
先用grep排除以-mobile结尾的行,再用tr将换行符替换为空格:
apps=$(grep -vE '-mobile$' file.txt | tr -s '\n' ' ')
grep -v:反向匹配,保留不符合规则的行-E '-mobile$':用扩展正则匹配以-mobile结尾的行tr -s '\n' ' ':将换行符压缩并替换为单个空格
方法二:awk一步完成过滤与合并
用awk直接过滤目标行,并输出为空格分隔的单行(可避免末尾多余空格):
apps=$(awk '!/\-mobile$/{arr[++n]=$0} END{if(n>0){printf "%s", arr[1]; for(i=2;i<=n;i++) printf " %s", arr[i]}}' file.txt)
要是不在意末尾的空格,也可以用更简洁的写法:
apps=$(awk '!/\-mobile$/{printf "%s ", $0}' file.txt)
方法三:sed删除目标行后合并
先用sed删除以-mobile结尾的行,再进行合并:
apps=$(sed '/-mobile$/d' file.txt | tr -s '\n' ' ')
执行上述任一命令后,apps变量的值即为预期结果:
projectA-app1 projectA-app2 projectB-app1
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

