我有一个包含以下格式的字符串:
aa_bb_cc_dd
aa_bb_cc_dd_ee_ff
我想获得:
bb_cc
bb_cc_dd_ee
我尝试'切',但我无法获得我想要的东西。
答案 0 :(得分:3)
使用bash
时,您可以使用内置函数执行此任务:
strip_headtail() {
local s=$1
## strip the head
s=${s#*_}
## strip the tail
s=${s%_*}
echo ${s}
}
strip_headtail aa_bb_cc_dd
strip_headtail aa_bb_cc_dd_ee_ff
您可能需要查看bash-manual(man bash
)以获取更多相关信息。
搜索删除匹配的前缀模式 resp。 删除匹配的后缀模式。
答案 1 :(得分:2)
使用awk:
$ echo "aa_bb_cc_dd
aa_bb_cc_dd_ee_ff" | awk -F_ '{for(i=1;i<NF;i++) $i=$(i+1); NF=NF-2}1' OFS=_
bb_cc
bb_cc_dd_ee
-F_
和OFS=_
将输入和输出字段分隔符设置为_
。{for(i=1;i<NF;i++) $i=$(i+1); NF=NF-2}
将每个字段设置为下一个字段,因此第n个将是第(n + 1)个字段。然后,减少2中的字段数。使用sed:
$ echo "aa_bb_cc_dd
aa_bb_cc_dd_ee_ff" | sed -e 's/^[^_]*_//' -e 's/_[^_]*$//'
bb_cc
bb_cc_dd_ee
sed -e
用于执行多个命令。's/^[^_]*_//'
从头到尾删除_
。's/_[^_]*$//'
从上一个_
删除到行尾。