Regex 在多个文件中查找并替换文件中的模式
我有200个具有以下结构的文本文件: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
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 |'*
。注意白色嵌套。组从外到内编号。在类似(())())
的情况下可能会混淆。实验并找出答案;-)