Tom*_*ica 2 grep string filenames regular-expression
我什至不确定是否grep打算用于单行数据中的正则表达式。谷歌搜索让我找到了这个前瞻表达式,它与 一起grep匹配任何.ext文件并返回裸名称:
XX@XX:/$ echo name.ext | grep -oP [^\.]+(?=.ext)
name
Run Code Online (Sandbox Code Playgroud)
这很好,但现在我提示用户保存文件,我不确定他是否会输入带有扩展名的名称。我尝试使前瞻有条件,确保所有名称都匹配,但这会返回一些我不明白的东西:
XX@XX:/$ echo name.ext | grep -oP "[^\.]+(?=.ext)?"
name
ext
Run Code Online (Sandbox Code Playgroud)
如果我省略扩展名,它会起作用:
XX@XX:/$ echo name | grep -oP "[^\.]+(?=.ext)?"
name
Run Code Online (Sandbox Code Playgroud)
那么这是一个grep问题还是regex问题?也许我需要以某种方式使前瞻非捕获?
您可以使用 POSIX shell 替换来删除.ext:
file='name.ext'
printf '%s\n' "${file%.ext}"
Run Code Online (Sandbox Code Playgroud)
要将扩展自由字符串分配给新变量,请执行
noext="${file%.ext}"
Run Code Online (Sandbox Code Playgroud)