我有200个文本文件,结构如下:
n01443537_0.JPEG 0 10 63 58
...
n01443537_499.JPEG 0 3 39 42
在每个文件中,第一部分(在下划线之前,即 n01443537 )是不同的。但是,它们都具有相同的结构,即以 n 开头,后跟8位数。
我希望将所有200个文件格式化如下:
n01443537/n01443537_0.JPEG n01443537
...
n01443537/n01443537_499.JPEG n01443537
我发现这个正则表达式n[^_]*
捕获了所需的模式,但在将它们放在一起时遇到了一些麻烦。
答案 0 :(得分:1)
注意:不熟练使用 function convert(numbers){
var arystrNumbers = numbers.split(" "), aryNumbers = [];
for( var idx in arystrNumbers ) {
aryNumbers.push(parseInt(arystrNumbers[idx]));
}
return aryNumbers;
};
console.log("Before: " + strNumbers);
console.dir(convert("1 2 2 2 2"));
或awk
。
适用于此案例的正则表达式如下:
正则表达式: bash
替换为: ((n\d{8})_\d+\.JPEG).*
的 Regex101 Demo 强>
答案 1 :(得分:1)
假设您的文件位于当前目录中,您可以从命令行使用sed
,如下所示:
sed --in-place 's|\(^n[0-9]*\)\(_[0-9]*\.[a-zA-Z]*\)\(.*\)|\1/\1\2 \1|' *
这个|\1/\1\2 \1|
是你的目标,第一个\1
匹配第一个部分(例如n01443537)然后是/
然后是\1
然后\2
(例如_499.JPEG)然后是一个空格,最后是\1
\[number]
指的是在|\(^n[0-9]*\)\(_[0-9]*\.[a-zA-Z]*\)\(.*\)|