【问题标题】:How to remove last element of the delimited string using Bash/Sed/Awk/Perl inside bash script [duplicate]如何在 bash 脚本中使用 Bash/Sed/Awk/Perl 删除分隔字符串的最后一个元素 [重复]
【发布时间】:2019-04-11 15:08:11
【问题描述】:

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

【问题讨论】:

  • echo "${STR1%/*}/"
  • 我很抱歉我错误地重新打开了这个。我现在无法将其复制,有人可以将其复制stackoverflow.com/questions/4563060/…我的孩子错误地触摸了该选项:)

标签: bash perl awk sed


【解决方案1】:

只需使用dirname:

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

【讨论】:

  • 目录名运行良好。谢谢。
【解决方案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: 使用 subawk 程序。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多