Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Python 从文件中提取每一行并将其作为变量传递给;foreach“;环_Python_Regex_Linux_Sed - Fatal编程技术网

Python 从文件中提取每一行并将其作为变量传递给;foreach“;环

Python 从文件中提取每一行并将其作为变量传递给;foreach“;环,python,regex,linux,sed,Python,Regex,Linux,Sed,有人能帮我想出一个简单的方法来使用任何脚本吗?我将在Linux上运行脚本 1)我有一个文件1,其中包含以下行: (Bank8GntR[3] | Bank8GntR[2] | Bank8GntR[1] | Bank8GntR[0] ), (Bank7GntR[3] | Bank7GntR[2] | Bank7GntR[1] | Bank7GntR[0] ), (Bank6GntR[3] | Bank6GntR[2] | Bank6GntR[1] | Bank6GntR[0] ), (

有人能帮我想出一个简单的方法来使用任何脚本吗?我将在Linux上运行脚本

1)我有一个文件1,其中包含以下行:

 (Bank8GntR[3] | Bank8GntR[2] | Bank8GntR[1] | Bank8GntR[0] ),

 (Bank7GntR[3] | Bank7GntR[2] | Bank7GntR[1] | Bank7GntR[0] ),

 (Bank6GntR[3] | Bank6GntR[2] | Bank6GntR[1] | Bank6GntR[0] ),

 (Bank5GntR[3] | Bank5GntR[2] | Bank5GntR[1] | Bank5GntR[0] ),  
2)我需要将文件1的内容修改为以下内容并写入文件2

 (Bank15GntR[3] | Bank15GntR[2] | Bank15GntR[1] | Bank15GntR[0] ),

 (Bank14GntR[3] | Bank14GntR[2] | Bank14GntR[1] | Bank14GntR[0] ),

 (Bank13GntR[3] | Bank13GntR[2] | Bank13GntR[1] | Bank13GntR[0] ),

 (Bank12GntR[3] | Bank12GntR[2] | Bank12GntR[1] | Bank12GntR[0] ),
因此,我必须:

  • 读取文件1中的每一行
  • 使用正则表达式进行“搜索”
  • 要匹配银行[0-9]GntR
  • 将\1替换为“7添加到匹配的数字”
  • 将其插回线路中
  • 将该行写入新文件

  • 假设您不必使用python,可以使用
    awk

    cat test.txt|awk'匹配($0,/Bank([0-9]+)GntR/,nums){d=nums[1]+7;gsub(/Bank[0-9]+GntR\[/,“Bank”d“GntR[”);print}'
    
    这将提供所需的输出


    这里的要点是,
    match
    将匹配您的数据,并允许捕获组,您可以使用这些组提取数字。由于awk支持算术,您可以在awk中添加7,然后替换该行其余部分的所有值。注意,我假设该行中的所有值都有相同的数字。

    关于Python中的类似内容:

    # a function that adds 7 to a matched group.
    # groups 1 and 2, we grabbed (Bank) to avoid catching the digits in brackets.
    def plus7(matchobj):
      return '%s%d' % (matchobj.group(1), int(matchobj.group(2)) + 7)
    
    # iterate over the input file, have access to the output file.
    with open('in.txt') as fhi, open('out.txt', 'w') as fho:
      for line in fhi:
        fho.write(re.sub('(Bank)(\d+)', plus7, line))
    

    您没有将其替换为“数字匹配乘以2”抱歉!我刚刚意识到这一点,并做了更改。你必须使用python吗?或者它可以是任何东西吗?你的标签提到
    sed
    ,你强调这是一个在Linux上运行的脚本,所以我不确定它是否必须是python。实际上它可以是任何东西…python不一定要。注意:
    with
    在2.7之前只支持一个文件句柄。如果你在使用任何东西,你需要嵌套两个语句哇!这就像一个符咒。我从来没有用我在awk的基本知识想到过这一点。非常感谢!!实际上,我必须查找如何获得awk,以允许我自己使用捕获组。我发现以下com这是非常有用的!谢谢!非常有用的链接!!