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

时间:2011-06-07 18:50:42

标签: python regex linux sed

有人可以帮我找出一个使用任何脚本执行此操作的简单方法吗?我将在Linux上运行脚本

1)我有一个file1,它有以下几行:

 (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)我需要将file1的内容修改如下并写入file2

 (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. 从file1
  2. 中读取每一行
  3. 使用正则表达式“搜索”,
  4. 匹配Bank [0-9] GntR,
  5. 将“1添加到数字匹配”,
  6. 替换\ 1
  7. 将其插回行中,
  8. 将该行写入新文件。

2 个答案:

答案 0 :(得分:3)

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))

答案 1 :(得分:0)

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

执行此操作
cat test.txt | awk 'match($0, /Bank([0-9]+)GntR/, nums) { d=nums[1]+7; gsub(/Bank[0-9]+GntR\[/, "Bank" d "GntR["); print }'

这给出了所需的输出。

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

相关问题