使用DOT分隔符拆分UNIX字符串并存储在变量

时间:2015-07-29 22:43:27

标签: regex unix awk sed split

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

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

有什么建议吗?

我使用但未使用的一些示例

FILE=abc.*.*.* | mv /loc/def /loc/def.${FILE#*.}

1 个答案:

答案 0 :(得分:2)

回答修订问题

对于最新评论中修订的问题,其中只有一个文件与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命令将失败。