如何在bash脚本中使用Bash / Sed / Awk / Perl删除定界字符串的最后一个元素

时间:2018-11-08 05:45:11

标签: bash perl awk sed

我有以下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。 我该如何实现?

2 个答案:

答案 0 :(得分:4)

只需使用dirname

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

答案 1 :(得分:2)

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

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

解决方案2nd: 或使用纯BASH的参数扩展(在这里提到的所有解决方案中可能都是BEST解决方案)。

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

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

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

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

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