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

Regex 在多个文件中查找并替换文件中的模式,regex,bash,awk,replace,Regex,Bash,Awk,Replace,我有200个具有以下结构的文本文件: n01443537_0.JPEG 0 10 63 58 ... n01443537_499.JPEG 0 3 39 42 在每个文件中,第一部分(下划线之前,即n01443537)是不同的。但是,它们都具有相同的结构,即以n开头,后跟八位数字 我希望所有200个文件的格式如下: n01443537/n01443537_0.JPEG n01443537 ... n01443537/n01443537_499.JPEG n014435

我有200个具有以下结构的文本文件:

n01443537_0.JPEG    0   10  63  58
...
n01443537_499.JPEG  0   3   39  42
在每个文件中,第一部分(下划线之前,即n01443537)是不同的。但是,它们都具有相同的结构,即以n开头,后跟八位数字

我希望所有200个文件的格式如下:

n01443537/n01443537_0.JPEG n01443537
...
n01443537/n01443537_499.JPEG n01443537

我发现这个正则表达式捕获了所需的模式,但在组合起来时有点困难。

注意:不精通
awk
bash

适用于这种情况的正则表达式如下

正则表达式:
((n\d{8})\ud+\.JPEG)。*

替换操作:
\2/\1\2


注意:不精通
awk
bash

适用于这种情况的正则表达式如下

正则表达式:
((n\d{8})\ud+\.JPEG)。*

替换操作:
\2/\1\2


假设您的文件位于当前目录中,您可以从命令行使用
sed
,如下所示:

sed --in-place 's|\(^n[0-9]*\)\(_[0-9]*\.[a-zA-Z]*\)\(.*\)|\1/\1\2 \1|' *
\1/\1\2\1
是您的目标,第一个
\1
匹配第一部分(例如n01443537),然后出现一个
//code>,然后再次出现
\1
然后
\2
(例如_499.JPEG),然后是一个空格,最后是
\1


\[number]
指的是括号中的每个组
\(^n[0-9]*\)\([u[0-9]*\.[a-zA-Z]*\)\(.*\)

假设您的文件在当前目录中,您可以从命令行使用
sed
,如下所示:

sed --in-place 's|\(^n[0-9]*\)\(_[0-9]*\.[a-zA-Z]*\)\(.*\)|\1/\1\2 \1|' *
\1/\1\2\1
是您的目标,第一个
\1
匹配第一部分(例如n01443537),然后出现一个
//code>,然后再次出现
\1
然后
\2
(例如_499.JPEG),然后是一个空格,最后是
\1


\[number]
指的是括号中的每一组
\(^n[0-9]*\)\([u[0-9]*\.[a-zA-Z]*\)\(.*)

你对每一行的其余信息做了什么?(例如,
“0 10 63 58”
)?我刚刚删除了该数据。您对每行上的其余信息做了什么?(例如,
'0106358'
)?我刚刚删除了那个数据谢谢,我刚刚学会了我可以使用嵌套组,所以我的答案中的表达式可以重写为:
sed's | \(\(n[0-9]*\)\u0-9]*.[a-zA-Z]*\(.*\)\124\\ 2/\1\2'*
。注意白色嵌套。组从外到内编号。在类似
(())())
的情况下可能会混淆。实验并找出答案;-)谢谢你,我刚刚学会了使用嵌套组,所以我的答案中的表达式可以重写为:
sed's | \(\(n[0-9]*\)\uu[0-9]*\.[a-zA-Z]*\)\(.*)\124\\ 2/\1\2 |'*
。注意白色嵌套。组从外到内编号。在类似
(())())
的情况下可能会混淆。实验并找出答案;-)