使用正则表达式排除字符串的前3个字符

时间:2016-10-12 12:40:22

标签: regex bash sed

鉴于 bash 中的任何字符串,例如flaccid,我想匹配字符串中的所有字符,但前3个(在这种情况下,我想排除" fla"并匹配只有" ccid")。正则表达式还需要在 sed 中工作。

我已经尝试了正面看法以及以下正则表达式(以及其他各种不成功的表达式):

^.{3}+([a-z,A-Z]+)
sed -r 's/(?<=^....)(.[A-Z]*)/,/g'

谷歌一直没有帮助,因为它只会产生类似&#34;获得前3个字符的结果。&#34;

提前致谢!

4 个答案:

答案 0 :(得分:2)

如果你想从字符串中获取除了前3个之外的所有字符,你可以使用cut

str="flaccid"
cut -c 4- <<< "$str"

或bash变量替换:

str="flaccid"
echo "${str:3}"

这将删除字符串中的前3个字符。

答案 1 :(得分:1)

您可以在^.{3}(.*) / ^.{3}([a-zA-Z]+)这样的表达式中使用捕获组并抓取${BASH_REMATCH[1]}内容:

#!/bin/bash
text="flaccid"
rx="^.{3}(.*)"
if [[ $text =~ $rx ]]; then
        echo ${BASH_REMATCH[1]};
fi

请参阅online Bash demo

sed中,您还应该使用捕获组/反向引用来获取所需内容。要保留前3个字符,您可以使用简单的:

echo "flaccid" | sed 's/.\{3\}//'

this regex demo.\{3\}完全匹配任何3个字符,并且仅从开头删除它们,因为未使用g修饰符。

现在,上述两个解决方案都将输出ccid,仅返回前3个字符。

答案 2 :(得分:0)

使用sed,只需删除它们

echo string | sed 's/^...//g'

答案 3 :(得分:0)

没有人将这个简单易用的解决方案命名为: shell“参数扩展”:

str="flacid"
echo "${str#???}

对于正则表达式(bash):

$ str="flaccid"
$ regex='^.{3}(.*)$'
$ [[ $str =~ $regex ]] && echo "${BASH_REMATCH[1]}"
ccid

sed 中的相同正则表达式:

$ echo "flaccid" | sed -E "s/$regex/\1/"
ccid

或sed(Basic Regex):

$ echo "flaccid" | sed 's/^.\{3\}\(.*\)$/\1/'
ccid