Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用sed替换较大文本体中的分隔列表_Regex_List_Sed_Variable Length - Fatal编程技术网

Regex 使用sed替换较大文本体中的分隔列表

Regex 使用sed替换较大文本体中的分隔列表,regex,list,sed,variable-length,Regex,List,Sed,Variable Length,我有一个大文件,其中有许多方括号内的可变长度数字列表实例,每行最多一个列表,列表从不为空,例如: [1,45,54,78]或[32] 我想去掉方括号和逗号,例如: 1455478或32 我可以在sed中将它们与此正则表达式成功匹配: \\[\\([0-9]*\\)\\(, \\([0-9]*\\)\\)*\\] 但我不知道如何使用组号来表示我想要的组,例如: sed 's/\\t\[\\([0-9]*\\)\\(, \\([0-9]*\\)\\)*\\]/\\t\\1 \\3/g' 只会导

我有一个大文件,其中有许多方括号内的可变长度数字列表实例,每行最多一个列表,列表从不为空,例如:

[1,45,54,78]或[32]

我想去掉方括号和逗号,例如:

1455478或32

我可以在sed中将它们与此正则表达式成功匹配:

\\[\\([0-9]*\\)\\(, \\([0-9]*\\)\\)*\\]
但我不知道如何使用组号来表示我想要的组,例如:

sed  's/\\t\[\\([0-9]*\\)\\(, \\([0-9]*\\)\\)*\\]/\\t\\1 \\3/g'
只会导致目标文件获取列表中的第一个和最后一个数字

我确实用awk解决了我的问题,但我想知道是否可以用sed解决

有什么方法可以引用sed中的可变组数吗?

如何:

sed 's/\[([\d ,]+)\]/\1/g' | sed 's/,//g'
两个独立的命令-第一个命令提取方括号内的内容,第二个命令带逗号。

如何:

sed 's/\[([\d ,]+)\]/\1/g' | sed 's/,//g'
两个独立的命令-第一个命令提取方括号内的内容,第二个命令带逗号。

此awk应执行以下操作:

awk '{gsub(/[][,]/,x)}1' file
1 45 54 78 or 32
此awk应具备以下功能:

awk '{gsub(/[][,]/,x)}1' file
1 45 54 78 or 32

这可能适用于GNU sed:

sed -r ':a;/\[([0-9]+(, )*)+\]/!b;s//\n&\n/;h;s/[][,]//g;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/;ba' file

这将找到图案,在其两侧标记一条换行符,并将整条线复制到保留空间。然后删除模式中的括号和逗号,并将更改后的模式与原始模式重新组合,然后重复,直到找不到其他模式。

这可能适用于GNU-sed:

sed -r ':a;/\[([0-9]+(, )*)+\]/!b;s//\n&\n/;h;s/[][,]//g;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/;ba' file

这将找到图案,在其两侧标记一条换行符,并将整条线复制到保留空间。然后,它删除模式中的括号和逗号,并将更改后的模式与原始模式重新组合,然后重复,直到找不到其他模式。

不明白如果每行只有一个匹配项,为什么组数会不同?你能展示一下你的awk解决方案吗?也许这会把事情弄清楚。如果你在同一个文件中也有[abc,foo]怎么办?不明白如果每行只有一个匹配项,为什么你的组数是可变的?你能展示一下你的awk解决方案吗?也许这会把事情弄清楚。如果你的[abc,foo]也在同一个文件中呢?