鉴于 bash 中的任何字符串,例如flaccid,我想匹配字符串中的所有字符,但前3个(在这种情况下,我想排除" fla"并匹配只有" ccid")。正则表达式还需要在 sed 中工作。
我已经尝试了正面看法以及以下正则表达式(以及其他各种不成功的表达式):
^.{3}+([a-z,A-Z]+)
sed -r 's/(?<=^....)(.[A-Z]*)/,/g'
谷歌一直没有帮助,因为它只会产生类似&#34;获得前3个字符的结果。&#34;
提前致谢!
答案 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
在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