从结束短语中删除下划线

时间:2014-01-31 13:37:16

标签: bash sed

我有要重命名的表名: 这里有一些例子:

AB_DC_JDZOJZD_HST_2090
AB_DC_JDZODSJOJZD_HIST_2500
AB_DC_JDZ_JJKOJZD_HIT_2050

但我想:

AB_DC_JDZOJZD
AB_DC_JDZODSJOJZD
AB_DC_JDZ_JJKOJZD

我的问题是: 如何从单词的末尾删除

3 个答案:

答案 0 :(得分:4)

假设您要删除_分隔的最后两个字段,您可以说:

sed -r 's/(_[^_]*){2}$//' filename

为了您的输入,它会产生:

AB_DC_JDZOJZD
AB_DC_JDZODSJOJZD
AB_DC_JDZ_JJKOJZD

为了好玩,您还可以使用revcut来生成相同的输出:

rev filename | cut -d_ --complement -f1,2 | rev

答案 1 :(得分:1)

只需在shell中使用参数扩展:

while read word; do echo "${word%_*_*}"; done <<END
AB_DC_JDZOJZD_HST_2090
AB_DC_JDZODSJOJZD_HIST_2500
AB_DC_JDZ_JJKOJZD_HIT_2050
END
AB_DC_JDZOJZD
AB_DC_JDZODSJOJZD
AB_DC_JDZ_JJKOJZD

答案 2 :(得分:0)

您可以使用awk

awk -F_ '{NF-=2}8' OFS="_" file
AB_DC_JDZOJZD
AB_DC_JDZODSJOJZD
AB_DC_JDZ_JJKOJZD

这将使用_作为分隔符删除最后两个字段。