嗨,我正在尝试从一个较大的字符串中提取--dest
字符串之后提供的path的值。它适用于大多数情况,但无法将其解析为当前目录/点(.
)。有人可以请更正使用的正则表达式,以便它可以获取所有可能的路径吗?
当前我正在使用[a-zA-Z/.~0-9]
工作案例:
echo 'foo.tgz labonlu.txt --dest /foo/bar' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
/foo/bar
echo 'foo.tgz labonlu.txt --dest /var/log' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
/var/log
echo 'foo.tgz labonlu.txt --dest /tmp' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
/tmp
echo 'foo.tgz labonlu.txt --dest /home/monk' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
/home/monk
echo 'foo.tgz labonlu.txt --dest ..' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
..
我需要修改我的正则表达式以也包括pdw。这不会打印输出
无效的情况:
echo 'foo.tgz labonlu.txt --dest .' |grep -oP -- '--dest\s+\K[a-zA-Z/~.0-9][^ ]+'
我能够像下面那样使用awk
来获得结果,但是对于有效的路径语法(以[a-zA-Z/~.0-9]
开头),它的矫kill过正和验证并未完成。
awk '{for(i=1;i<=NF;i++) if($i == "--dest") print $(i+1)}'