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

问题描述 投票:0回答:2

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

我有以下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。我怎样才能做到这一点?

bash perl awk sed
2个回答
2
投票

解决方案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'

4
投票

只需使用dirname

$ dirname /home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9/K4me3
/home/ubuntu/foo/hicpro_data/output/3333_XX501621_0368_AH2BHTBGX9
© www.soinside.com 2019 - 2024. All rights reserved.