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#*.}
修订问题的答覆
对于最新评论中修订的问题,其中只有一个文件与globabc.*.*.
匹配,并且该文件位于当前目录中:
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
,但是你提供的示例代码使它看起来像是一个文件名。是哪一个?