我使用像
这样的字符串abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf
我需要得到一个新的,我在原始字符串中删除从“_”的开头到最后一次出现的所有内容以及下一个字符(可以是3,4,或任何数字)
所以在这种情况下我会得到
_adf
我怎么能用“sed”或其他bash工具来做呢?
答案 0 :(得分:5)
正则表达式模式匹配是贪婪的。因此^。* _将匹配所有字符,包括最后一个_。然后将下划线放回:
echo abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf | sed 's/^.*_/_/'
答案 1 :(得分:1)
sed 's/^(.*)_([^_]*)$/_\2/' < input.txt
答案 2 :(得分:1)
答案 3 :(得分:1)
答案 4 :(得分:1)
答案 5 :(得分:1)
如果你在bash变量中有这样的字符串(我没有看到问题中指定的字符串),你可以使用parameter expansion:
s="abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf"
t="_${s##*_}"
echo "$t" # ==> _adf
答案 6 :(得分:0)
Perl方式:
echo 'abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf' | \
perl -e 'print ((split/(_)/,<>)[-2..-1])'
<强>输出:强>
_adf
答案 7 :(得分:0)
只是为了好玩:
echo abc_dsdsds_ss_gsgsdsfsdf_ewew_wewewewewew_adf | tr _ '\n' | tail -n 1 | rev | tr '\n' _ | rev