在第二列之后查找并替换

2024-09-26 18:05:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下几行

92520536843;Sof_voya_Faible_Email_am;EMAIL;28/01/2015;1;0;0;Sof_voya_Faible_Email_am;30/01/2015;Sof_voya_Faible_Email_Relance_am
92515196529;Sof_trav_Fort_Email_pm_%yyyy%mm%dd%;EMAIL;05/02/2015;1;0;0;Sof_trav_Fort_Email_pm_%yyyy%mm%dd%;09/02/2015;Export Trav_Fort Postal

我试图在第7个字段之后替换像Sof__%yyyy%mm%dd%这样的字符串。你知道吗

我想用sed

sed -i 's/<string_to_look_for>/<string_to_replace>/7g' filename

但它只是更改字段分隔符。你知道吗

我想用这个

awk -F";" '{ for (i=7; i<=NF; i++) print $i }' filename 

但我不知道如何插入搜索并替换要替换的字符串。你知道吗

欢迎任何帮助。你知道吗

编辑:替换第7列后面的Sof__%yyyy%mm%dd%等字符串后的预期结果。

92520536843;Sof_voya_Faible_Email_am;EMAIL;28/01/2015;1;0;0;voya_Faible_Email_am;30/01/2015;voya_Faible_Email_Relance_am
92515196529;Sof_trav_Fort_Email_pm_%yyyy%mm%dd%;EMAIL;05/02/2015;1;0;0;trav_Fort_Email_pm;09/02/2015;Export Trav_Fort Postal

对于Python和Perl的专家们,当我试图提高我在这些语言方面的知识时,欢迎你们的帮助:)


Tags: 字符串emailexportamsedpostalpmfort
3条回答

通过Python3。你知道吗

#!/usr/bin/python3
import sys
fil = sys.argv[1]
with open(fil) as f:
    for line in f:
        part1 = ';'.join(line.split(';')[:7])
        part2 = ';'.join(line.split(';')[7:]).replace('Sof_','').replace('_%yyyy%mm%dd%', '')
        print(part1+';'+part2, end="")

将上面的文本保存在一个文件中,比如script.py,然后运行它

python3 script.py inputfile

通过Perl。你知道吗

$ perl -pe 's/^(?:[^;]*;){7}(*SKIP)(*F)|(?:_%yyyy%mm%dd%|Sof_)//g' file
92520536843;Sof_voya_Faible_Email_am;EMAIL;28/01/2015;1;0;0;voya_Faible_Email_am;30/01/2015;voya_Faible_Email_Relance_am
92515196529;Sof_trav_Fort_Email_pm_%yyyy%mm%dd%;EMAIL;05/02/2015;1;0;0;trav_Fort_Email_pm;09/02/2015;Export Trav_Fort Postal

您可以使用这个awk

awk 'BEGIN{FS=OFS=";"} {for (i=7;i<=NF;i++) gsub(/Sof_|_%yyyy%mm%dd%/, "", $i) } 1' file
92520536843;Sof_voya_Faible_Email_am;EMAIL;28/01/2015;1;0;0;voya_Faible_Email_am;30/01/2015;voya_Faible_Email_Relance_am
92515196529;Sof_trav_Fort_Email_pm_%yyyy%mm%dd%;EMAIL;05/02/2015;1;0;0;trav_Fort_Email_pm;09/02/2015;Export Trav_Fort Postal

在Python中,您可以使用re和csv模块来执行以下操作:

import re
import csv

with open(fn) as fin:
    r=csv.reader(fin, delimiter=';')
    for line in r:
        result=line[:7]
        for field in line[:7]:
            if re.search(r'Sof_', field):
                field=re.sub(r'Sof_', 'repalcaement for Sof_', field)
            if re.search(r'_%yyyy%mm%dd%', field):
                field=re.sub(r'Sof_', 'repalcaement for _%yyyy%mm%dd%', field)
            result.append(field)   
        print result     

相关问题 更多 >

    热门问题