如何在bash脚本中使用Bash / Sed / Awk / Perl删除分隔字符串的最后一个元素[duplicate]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在bash脚本中使用Bash / Sed / Awk / Perl删除分隔字符串的最后一个元素[duplicate]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有以下bash脚本

#!/bin/bash
STR1=/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9/CTCF
STR2=/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9/K4me3

我想要做的是删除用$STR1分隔的$STR2/的最后一个元素,并在该bash脚本中执行。

屈服于

/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9/

对于$STR1$STR2,并将其分配给一个新的变量,例如NW_STR1。我怎样才能做到这一点?

答案

解决方案1:如果您有GNU awk,请尝试以下操作。

echo "$STR2" | awk 'BEGIN{FS=OFS="/"}NF--'

解决方案第二:或者使用纯BASH的参数扩展(可能是这里提到的最佳解决方案)。

echo "${STR2%/*}"
/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9

解决方案3:使用awk匹配。

echo "$STR2" | awk 'match($0,/\/.*\//){print substr($0,RSTART,RLENGTH-1)}'

解决方案4:使用sub程序的awk

echo "$STR2" | awk '{sub(/\/[[:alnum:]]+$/,"")} 1'
另一答案

只需使用dirname

$ dirname /home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9/K4me3
/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9

以上是关于如何在bash脚本中使用Bash / Sed / Awk / Perl删除分隔字符串的最后一个元素[duplicate]的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中使用 sed 替换多行模式

sh 在bash中使用sed查找并重命名脚本

用bash脚本从plist中提取字符串,也许是sed?

如何查找多个文件、检查重复文件并用 bash、sed 脚本替换

使用 sed 在 bash 脚本中进行就地重命名

Bash:从脚本中查找并替换文本