Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在bash中找到模式的第四个匹配项后获取所有字符串_Regex_Bash_Shell - Fatal编程技术网

Regex 在bash中找到模式的第四个匹配项后获取所有字符串

Regex 在bash中找到模式的第四个匹配项后获取所有字符串,regex,bash,shell,Regex,Bash,Shell,以字符串开头,如: String=1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS. 匹配第4个冒号之后的所有字符串并在shell脚本中为变量赋值所需的正则表达式,如: var_result="Searching done for the string:SUCCESS." 下面的解决方案可能会对您有所帮助。 假设以下是变量的值: var="1973251922:19732519

以字符串开头,如:

String=1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS.
匹配第4个冒号之后的所有字符串并在shell脚本中为变量赋值所需的正则表达式,如:

var_result="Searching done for the string:SUCCESS."

下面的解决方案可能会对您有所帮助。 假设以下是变量的值:

var="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
echo "$var"
1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS.

echo "$var" | awk -F":" '{$1=$2=$3=$4="";sub(/^:+/,"");print $0}' OFS=":"
Searching done for the string:SUCCESS.

下面的解决方案可能会对您有所帮助。 假设以下是变量的值:

var="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
echo "$var"
1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS.

echo "$var" | awk -F":" '{$1=$2=$3=$4="";sub(/^:+/,"");print $0}' OFS=":"
Searching done for the string:SUCCESS.
使用shell bash或POSIX ${string*:*:*:*:}是前缀删除的一个示例。它删除由四个冒号分隔的字符串组成的前缀

输出可以保存在shell变量中:

$ var_result=${string#*:*:*:*:}
$ echo "$var_result"
Searching done for the string:SUCCESS.
$ var_result=$(sed -E 's/([^:]*:){4}//' <<<"$string")
$ echo "$var_result"
Searching done for the string:SUCCESS.
使用切割 这方面的工作:

$ string="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
$ cut -d: -f 5- <<<"$string"
Searching done for the string:SUCCESS.
如果您只有一个POSIX shell,而不是bash,那么我们需要使用echo:

更安全的是,printf:

使用sed 以下使用sed删除冒号定义的前四个字段:

$ sed -E 's/([^:]*:){4}//' <<<"$string"
Searching done for the string:SUCCESS.
以下内容同样适用于POSIX Shell:

$ var_result=$(printf '%s' "$var" | sed -E 's/([^:]*:){4}//')
$ echo "$var_result"
Searching done for the string:SUCCESS.
使用shell bash或POSIX ${string*:*:*:*:}是前缀删除的一个示例。它删除由四个冒号分隔的字符串组成的前缀

输出可以保存在shell变量中:

$ var_result=${string#*:*:*:*:}
$ echo "$var_result"
Searching done for the string:SUCCESS.
$ var_result=$(sed -E 's/([^:]*:){4}//' <<<"$string")
$ echo "$var_result"
Searching done for the string:SUCCESS.
使用切割 这方面的工作:

$ string="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
$ cut -d: -f 5- <<<"$string"
Searching done for the string:SUCCESS.
如果您只有一个POSIX shell,而不是bash,那么我们需要使用echo:

更安全的是,printf:

使用sed 以下使用sed删除冒号定义的前四个字段:

$ sed -E 's/([^:]*:){4}//' <<<"$string"
Searching done for the string:SUCCESS.
以下内容同样适用于POSIX Shell:

$ var_result=$(printf '%s' "$var" | sed -E 's/([^:]*:){4}//')
$ echo "$var_result"
Searching done for the string:SUCCESS.

使用bash regex,您可以说:

String="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."

if [[ $String =~ ^([^:]*:){4}(.+)$ ]]; then
    echo ${BASH_REMATCH[2]}
fi

使用bash regex,您可以说:

String="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."

if [[ $String =~ ^([^:]*:){4}(.+)$ ]]; then
    echo ${BASH_REMATCH[2]}
fi

请在帖子中为示例输入/输出使用代码标记。请在帖子中为示例输入/输出使用代码标记。结果应在第4个冒号后包含所有字符串/字符。i、 e result=搜索字符串完成:成功。结果也应该有剩余的字符串。@user3269606,请立即检查。echo$var | awk'{sub/[^::]*:{4}/,}1'结果应该在第四个冒号后面有所有字符串/字符。i、 e result=搜索字符串完成:成功。结果也应该有剩余的字符串。@user3269606,请现在检查。echo$var | awk'{sub/[^:]*:{4}/,}1'${string*:*:*:*:*:*:}似乎做得很好。谢谢:${string*:*:*:*:*:}似乎做得很好。谢谢::