在macOS Sierra(版本10.12.6)中,我有一个包含许多纯文本(.txt)文件的目录。每个文件都有一个不太有用的名称,例如“untitled text 252.txt”。我想知道是否可以根据每个文件第一行中的代码对每个文件进行编程重命名。
每个文件都以部分符号(§),一个空格,始终包含一个句点(.)和一个空格的代码开头。代码通常只是数字,但偶尔也会有一个带有字母的尾随连字符(-)。例如:
我想根据其代码重新命名每个文件,但首先重新格式化代码。简而言之,前缀为P,从代码中去除句点并添加尾随的.txt。使用上述示例,文件名将是:
在命令提示符处,我已经找出如何从每个文件中获取代码:
这将返回从段落符号到尾随空格的所有内容(例如
因此,剩下的问题是:
1、如何重新格式化grep结果以得到想要的文件名(例如
2、如何将文件重命名操作与grep组合使用?
每个文件都以部分符号(§),一个空格,始终包含一个句点(.)和一个空格的代码开头。代码通常只是数字,但偶尔也会有一个带有字母的尾随连字符(-)。例如:
'§ 177.30 '
或'§ 60.10-a '
。我想根据其代码重新命名每个文件,但首先重新格式化代码。简而言之,前缀为P,从代码中去除句点并添加尾随的.txt。使用上述示例,文件名将是:
P17730.txt
和P6010-a.txt
。在命令提示符处,我已经找出如何从每个文件中获取代码:
grep -o '^§ [A-Za-z0-9]*\.[A-Za-z0-9\-]* ' *.txt
这将返回从段落符号到尾随空格的所有内容(例如
'§ 130.65-a'
)。因此,剩下的问题是:
1、如何重新格式化grep结果以得到想要的文件名(例如
P13065-a.txt
);以及,2、如何将文件重命名操作与grep组合使用?
sed
在}
之前的p
后需要加上分号;
。 - randomir