Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
linux中多文件的正则表达式替换_Linux_Bash_Shell - Fatal编程技术网

linux中多文件的正则表达式替换

linux中多文件的正则表达式替换,linux,bash,shell,Linux,Bash,Shell,我在linux服务器的一个文件夹中有200k个文件,我需要在其中使用regex转换这些文件 下面是要在文本文件中查找的正则表达式 ([^\s]+?.*)=((.*(?=,$))+|.*).* 现在我需要用下面的替换值替换它 "$1":"$2", 当我在python中使用上述正则表达式时,它们工作得很好。我正在使用的服务器不可用 支持python,所以我需要使用bash命令。我尝试了下面的bash命令,但它不起作用 命令: sed -r 's/([^\

我在linux服务器的一个文件夹中有200k个文件,我需要在其中使用regex转换这些文件 下面是要在文本文件中查找的正则表达式

([^\s]+?.*)=((.*(?=,$))+|.*).*
现在我需要用下面的替换值替换它

"$1":"$2",
当我在python中使用上述正则表达式时,它们工作得很好。我正在使用的服务器不可用 支持python,所以我需要使用bash命令。我尝试了下面的bash命令,但它不起作用

命令:

sed -r  's/([^\s]+?.*)=((.*(?=,$))+|.*).*/"$1":"$2",/g' *20200502* 

上面的bash命令不起作用

测试起来有点困难,但仅分析您的方法可能会起作用:

sed -i -E "s/([^\s]+?.*)=((.*(?=,$))+|.*).*/\1$1\2$2/" *20200502* 
  • \第二部分中的1和\2是对第一部分中捕获的组的引用
  • -E表示扩展正则表达式(+和分组)
修复了您的正则表达式:

sed-E的/([^[:space:][]+?*)=((.*==,$)+|*。*/“\1”:“\2”,/g'*20200502*
  • 将不适当的
    [^\s]
    替换为其POSIX ERE语法等价物
    [^[:space:]
  • 修复了错误放置的可选标记
    ?=,$
    ,改为
    =?,$
  • 修复了带有
    “\1”:“\2”
    的无效捕获组引用语法
    “$1”:“$2”

  • sed
    不理解
    [\s]
    等等,但是
    [[:space:][]
    是POSIX的命名字符类。请参阅:hi@nikoksr我得到的错误与之前的错误相同错误:-sed:-e表达式#1,char 38:前面的正则表达式无效