Regex 使用点分隔符拆分UNIX字符串并存储在变量中

Regex 使用点分隔符拆分UNIX字符串并存储在变量中,regex,unix,awk,sed,split,Regex,Unix,Awk,Sed,Split,我有一个文件abc.123.234.345,我想使用UNIX oneliner将123.234.345的值存储到variable1中。 然后我必须将名为def的文件重命名为def.123.234.345 我尝试了sed,awk,但无法生成拆分字符串 我必须搜索为abc.*.,因为字符串每次都会不同 有什么建议吗 一些我使用但不起作用的样本 FILE=abc.*.*.* | mv /loc/def /loc/def.${FILE#*.} 修订问题的答覆 对于最新评论中修订的问题,其中只有一个文件

我有一个文件
abc.123.234.345
,我想使用UNIX oneliner将
123.234.345
的值存储到variable1中。 然后我必须将名为
def
的文件重命名为
def.123.234.345
我尝试了
sed
awk
,但无法生成拆分字符串

我必须搜索为
abc.*.
,因为字符串每次都会不同

有什么建议吗

一些我使用但不起作用的样本

FILE=abc.*.*.* | mv /loc/def /loc/def.${FILE#*.}
修订问题的答覆 对于最新评论中修订的问题,其中只有一个文件与glob
abc.*.*.
匹配,并且该文件位于当前目录中:

find . -maxdepth 1 -name 'abc.*.*.*' -exec bash -c 'mv /loc/def "/loc/def.${1#./*.}"' none {} \;
或者,分两步进行:

file=$(echo abc.*.*.*)
mv /loc/def "/loc/def.${file#./*.}"
请注意,最好为小写或混合大小写的shell变量使用名称。系统对其变量使用大写名称,您不希望意外地覆盖其中一个变量

原问题的答案 这就是你要问的:

find . -name 'abc.*.*.*' -exec bash -c 'mv /loc/def "/loc/def.${1#./*.}"' none {} \;
上述命令执行
mv
命令,例如:

mv /loc/def /loc/def.123.234.345

请注意,在第一个
mv
命令之后,
/loc/def
将不再存在,第二个
mv
命令将因此失败。

我只想将数字从def更新为def.123.234.345,而不是abc.123.234.345。move命令中的源文件是
/loc/def
。您不能多次移动它。当您第二次找到
abc.*.*.
文件时,您希望源代码包含什么文件?我想获取abc的值。。。每次我必须重命名并移动新文件时都要首先更新def另一个说明:你写“我有一个字符串”
abc.123.234.345
,但是你提供的示例代码使它看起来像是一个文件名。是哪一个?