在多个文件中查找和替换文件中的模式

时间:2016-03-20 19:44:04

标签: regex bash awk replace

我有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[^_]*捕获了所需的模式,但在将它们放在一起时遇到了一些麻烦。

2 个答案:

答案 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]*\)\(.*\)|

括号之间关闭的每个组