regex - 用点分隔符分割 UNIX 字符串并存储在变量中

标签 regex unix awk sed split

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

我必须搜索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 命令将失败。

关于regex - 用点分隔符分割 UNIX 字符串并存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712401/

相关文章:

javascript - 当它不是应用于元素的唯一类时,通过了解其名称的一部分来获取类名称

ruby - 匹配包含第一个字符不是数字的字母的字符串

bash - 在 "for"循环 bash 中解析多个 awk 变量

linux - 使用 AWK 在 n 个匹配项之后和 m 个匹配项之前查找并替换

ruby - Grep 文件并在 ruby​​ 中提取值

检查 C 中的空行 - 正则表达式

php - m 正则表达式模式修饰符

unix - 子进程在 fork() 之后始终为零且始终唯一?

perl - 使用ssh在远程服务器上执行内联脚本时保护管道字符

c - 编写基于 Unix 的操作系统