bash / sed:修剪指定字符的第一个和最后一个序列

时间:2019-03-28 07:50:23

标签: regex bash sed

1)通过使用sed,如何删除字符串末尾和开头的所有冒号序列。例如,将“ :: trim ::: test ::”更改为“ trim ::: test”。

echo "::trim:::test::" | sed 's/:*//'

2)如何使用以下语法执行相同操作:

test="::trim:::test::"
echo ${test%:}

1 个答案:

答案 0 :(得分:1)

在sed中,字符串的开头由^匹配,字符串的末尾由$匹配:

sed 's/^:*\|:*$//g'

参数扩展#%仅在字符串的一端起作用,并且不能组合使用,因此我们需要两个命令:

shopt -s extglob
test=${test##+(:)}
test=${test%%+(:)}

extglob选项启用与正则表达式中的+(:)对应的:+,即匹配一次或多次。 #%被加倍以贪婪地匹配。