我需要从此示例字符串中获取值 myfile.ext :'My message [file:myfile.ext]'
我看到了similar question,但是如果括号不在字符串中,则无法使字符串返回空字符串。
我需要检查字符串是否包含[file:***]
并返回变量***
否则必须为空值。
答案 0 :(得分:3)
您可以使用grep
:
$ grep -Po '(?<=\[file:)[^]]*(?=])' file
myfile.ext
与...相同(取决于您是从文件或管道中读取):
$ echo "'My message [file:myfile.ext]'" | grep -Po '(?<=\[file:)[^]]*(?=])'
myfile.ext
它会查找[file:
之后到下一个]
之后的字符串。要将其存储到变量中,请使用var=$(command)
表达式:
result=$(grep -Po '(?<=\[file:)[^]]*(?=])' file)
默认情况下为空,否则为myfile.ext
。
$ cat a
My message [file:myfile.ext
My message [file:myfile.ext]]a]
$ grep -Po '(?<=\[file:)[^]]*(?=])' a
myfile.ext
答案 1 :(得分:3)
您可以使用sed的-n标志来禁止打印所有行,然后专门使用正则表达式中的p标志来打印匹配项:
sed -n 's/\[file:\([^\]*\)]/\1/p' file
答案 2 :(得分:1)
您可以使用此BASH正则表达式:
[[ "$s" == *[* ]] && [[ "$s" =~ \[[^:]*:([^\]]+)\] ]] && echo "${BASH_REMATCH[1]}"
myfile.ext