首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不同行的多个模式匹配后替换第n行的单词?

在不同行的多个模式匹配后替换第n行的单词,可以通过以下步骤实现:

  1. 读取文本文件或输入的字符串,并将其按行拆分成一个字符串数组,每个元素代表一行文本。
  2. 遍历每一行文本,使用正则表达式或其他方法进行模式匹配。如果匹配成功,则将匹配到的行索引保存到一个数组中。
  3. 判断保存匹配行索引的数组长度是否大于等于n。如果小于n,则无法替换第n行的单词。
  4. 若匹配行索引数组长度大于等于n,则取第n个匹配行的索引,即要替换的行索引。
  5. 在要替换的行索引处,将该行文本进行单词替换操作。可以使用字符串函数或正则表达式实现单词替换。
  6. 将替换后的行文本重新放回原来的字符串数组的相应位置。
  7. 最后,将字符串数组按行重新拼接成一个字符串,并输出结果。

下面是一个示例代码(使用Python语言):

代码语言:txt
复制
import re

def replace_word_in_nth_line(text, patterns, n, replacement):
    lines = text.split('\n')

    match_indexes = []
    for i in range(len(lines)):
        for pattern in patterns:
            if re.search(pattern, lines[i]):
                match_indexes.append(i)
                break

    if len(match_indexes) >= n:
        line_index = match_indexes[n-1]
        lines[line_index] = re.sub(r'\b\w+\b', replacement, lines[line_index])

    return '\n'.join(lines)

text = """
This is line 1.
This is line 2 with keyword.
This is line 3 with keyword.
This is line 4.
"""

patterns = ['keyword']
n = 2
replacement = 'replacement'

result = replace_word_in_nth_line(text, patterns, n, replacement)
print(result)

输出结果为:

代码语言:txt
复制
This is line 1.
This is line 2 with replacement.
This is line 3 with keyword.
This is line 4.

这个示例代码中,我们通过传入文本、模式、行号和替换词,实现了在第n行进行单词替换的功能。在这个例子中,我们使用了正则表达式进行模式匹配,并使用re.sub()函数进行单词替换操作。你可以根据自己的实际情况进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【数据处理】sed原理及使用举例(快速理解核心)

* #匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] #匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。...[^] #匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& #保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \< #锚定单词的开始,如:/\匹配包含以love开头的单词的行。...\> #锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} #重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。...表示若匹配不到 D,d 模式空间,删除 模式空间没有回车符,D/d一样 D/d执行后,都会跳到下一行(不管模式空间是否有内容) 简单用法 #删除第N行 sed -i 'Nd' filename #删除第

3.2K546
  • linux中sed命令总结

    * # 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] # 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。...[^] # 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& # 保存搜索字符用来替换其他字符,如s/love/ **&** /,love改成 **love** 。 \匹配单词的开始,如:/\匹配包含以love开头的单词的行。...\> # 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} # 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。...第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。

    3.2K20

    Sed..

    * # 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] # 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。...[^] # 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& # 保存搜索字符用来替换其他字符,如s/love/ **&** /,love这成 **love** 。 \匹配单词的开始,如:/\匹配包含以love开头的单词的行。...\> # 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} # 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。...第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。

    1.6K20

    Linux系统开发: 学习linux三剑客(awk、sed、grep)(上)

    * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。...& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \匹配单词的开始,如:/\匹配包含以love开头的单词的行。...\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。.../pattern/,m:被模式匹配到的第一行起到m行 n,m 表示从n行到第m行 n,+m 表示从n行起往后增加m行 n~m:步进:以n行为基准值,每次增加m行 3.8 组合多个表达式 sed...txt 666.txt #替换123.txt、666.txt内的第二行往后每次增加两行的bck为sh,每行全面替换 给文件名\单词前统一替换加前缀或后缀或前后缀 需用到元字符集:^ 匹配行开始,如

    9.3K21

    第五章 正则表达式&字符处理

    --- 命令连接、顺序执行,如:echo aaaaa && echo bbbbb , 要求:必须每个命令都正确执行 || --- 多个命令连接,前命令执行失败,才会去执行后命令, 如: cat...匹配一个非换行符的字符 /l…x/ 匹配所有包含l后面3个字符任意,最后为x的行 * 匹配零或多个字符 /*linux/ 匹配所有模板是一个或多个空格后紧跟linux的行 [] 匹配一个指定范围内的字符...& 保存所搜字符用来替换其他字符 s/linux/**&**/ &表示搜索字符串,因此linux将变为**linux** /单词的开始 /\匹配包含linux开头的单词的行 /...> 指定单词的结束 /linux\>/ 匹配包含以linux结尾的单词的行 x\{m\} 重复字符X,M多少次 /o\{5\}/ 匹配包含5个o的行 x\{m,\} 重复字符X,至少M次 /o\{5,\...$d 表示从第10行到结尾 :10-20 s/linux/hello/p ---10-20行中,所有linux单词替换成hello %s/linux/hello/p %表示全文替换 :100

    2.1K20

    【linux命令讲解大全】081.sed:功能强大的流式文本编辑器

    * # 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] # 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。...[^] # 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& # 保存搜索字符用来替换其他字符,如s/love/ & /,love这成 love 。 匹配单词的开始,如:/匹配包含以love开头的单词的行。...> # 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 x{m} # 重复字符x,m次,如:/0{5}/匹配包含5个0的行。...第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。

    25710

    【Linux篇】--sed的用法

    处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。...* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。...[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \匹配单词的开始,如:/\匹配包含以love开头的单词的行。...\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。

    1.6K20

    linux中最为常用的三大文本(grep,sed,awk)处理工具

    ] sed ‘s/old/new/’ test 匹配每一行的第一个old替换为new sed 编辑器只替换每行中第 2 次出现的匹配模式 root@ubuntu-admin-a1:/home/sedTest...-n :显示行号   -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker   -c :显示总共有多少行被匹配到了...如"\blike"不会匹配alike,但是会匹配liker       \b或\>:锚定单词的词尾。...\2 :引用第2个左括号及其对应的右括号所匹配的内容。         \n :引用第n个左括号及其对应的右括号所匹配的内容。...,在文件中查找指定模式并显示匹配行的行号 grep -n root /etc/passwd /etc/shadow -例5 使用-v参数输出不包含指定模式的行 输出/etc/passwd文件中所有不含单词

    6.1K10

    idea maven 快捷键_idea快捷键大全最新

    (空格也算) T(大写)+指定字符 -> 反向跳转指定字符的下一个位置(空格也算) gg -> 跳转至文件头 G -> 跳转至文件尾 行号+G -> 跳转到指定行的开头(:N 到第N行,如 :137...,包含光标所在字符 d0 -> 删除光标前本行所有内容,不包含光标所在字符 dw -> 删除光标开始位置的字,包含光标所在字符 查找替换 cw -> 替换从光标所在位置后到一个单词结尾的字符 r ->...替换当前字符 R -> 替换当前行光标后的字符 :%s/abc/123/g -> 末行模式下,将当前文件中的所有abc替换成123 :1, 10s/abc/123/g -> 末行模式下,将第一行至第...10行之间的abc替换成123 /pattern -> 搜索 pattern的字符串(如果搜索出多个匹配,可按n键到下一个 N键到上一个) :e -> 打开一个文件 ....本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    94720

    sed 命令+正则表达式

    表示行号范围从x到y,如2,5表示从第2行到第5行     /pattern/    查询包含模式的行,如/disk/或/[a-z]/     /pattern/pattern/   查询包含两个模式的行...,如/disk/disks/     /pattern/,x  在给定行号上查询包含模式的行,如/disk/,3     x,/pattern/  通过行号和模式查询匹配行,如 3,/disk/    ...s     使用替换模式替换相应模式     a\     在定位行号后附加新文本信息        r     从另一个文本中读文本     i\     在定位行号后插入新文本信息        w...打印第1行到第3行     打印模式:  sed -n '/movie/'p temp.txt     打印含movie的行     使用模式和行号查询:  sed -n '3,/movie/'p temp.txt...在行首第4个字符为1,匹配操作表示为:^ . . . 1 3、在行尾以$匹配字符串或字符    可以说$与^正相反,它在行尾匹配字符串或字符, $符号放在匹配单词后。

    3.4K20

    Sed三剑客入门与进阶

    -f scriptfile files sed '[地址范围|模式范围] s#{被替换的字符串}#{替换后的字符串}#{替换标准}' [输入文件] #组合多个表达式 sed '表达式' | sed '...* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。...[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。...& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 \匹配单词的开始,如:/\匹配包含以love开头的单词的行。...\> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。 x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。

    3.1K10

    Vim高手修炼手册:Linux下最全常用命令集锦,Linux环境下vim不可不知的常用命令大全

    G 将光标移动到文件的最后一行 nG 将光标移动到文件的第n行 Ctrl + f 向下翻页 Ctrl + b 向上翻页 Ctrl + d 向下翻半页 Ctrl + u 向上翻半页 yy 复制当前行 p...粘贴到光标后的位置 P 粘贴到光标前的位置 dd 删除当前行 dw 删除从光标位置到单词末尾的内容 diw 删除光标所在的整个单词 u 撤销上一步操作 Ctrl + r 重做撤销的操作 v 进入可视模式... 从当前位置向上搜索指定的搜索词 :n 跳转到下一个搜索结果 :N 跳转到上一个搜索结果 :%s///g 在整个文件中替换所有匹配的为 :s///g 在当前行中替换所有匹配的为 :range s///g 在指定范围内替换匹配的为,例如:1,10s/old.../new/g将在第1到第10行中进行替换 :vsp 水平分割窗口并打开指定文件 :sp 垂直分割窗口并打开指定文件 :next 或 :n 跳转到下一个文件(在多文件编辑时) :prev

    13300

    linux实战(一)

    -l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。...匹配除换行符以外的单个字符  /m..y/  匹配包含字母m,后跟两个任意字符,再跟字母y的行  * 匹配零个或多个前导字符  /my*/  匹配包含字母m,后跟零个或多个y字母的行  []   匹配指定字符组内的任一字符...my将被替换为**my**  \<      词首定位符        /\匹配包含以my开头的单词的行  \>      词尾定位符       /my\>/  匹配包含以my结尾的单词的行...接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。...第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。

    2.2K10

    linux下vim命令详解

    :tabm [N] 把当前tab移动到第N个tab之后 对,正如你所想象的那样,跟eclipse, ue等的标签页是一个意思!...强制退出,放弃修改 查找替换 /pattern 向后搜索字符串pattern ?pattern 向前搜索字符串pattern n 下一个匹配(如果是/搜索,则是向下的下一个,?...搜索则是向上的下一个) N 上一个匹配(同上) :%s/old/new/g 搜索整个文件,将所有的old替换为new :%s/old/new/gc 搜索整个文件,将所有的old替换为...,长跳 0 跳至行首,不管有无缩进,就是跳到第0个字符 ^ 跳至行首的第一个字符 $ 跳至行尾 gg 跳至文件的第一行 gd 跳至当前光标所在的变量的声明处 [N...]G 跳到第N行,如0G,就等价于gg,100G就是第100行 fx 在当前行中找x字符,找到了就跳转至 ; 重复上一个f命令,而不用重复的输入fx tx 与fx类似,但是只是跳转到

    2.5K30

    Mac之vim普通命令使用

    :tabm [N] 把当前tab移动到第N个tab之后 对,正如你所想象的那样,跟eclipse, ue等的标签页是一个意思!...强制退出,放弃修改 查找替换 /pattern 向后搜索字符串pattern ?pattern 向前搜索字符串pattern n 下一个匹配(如果是/搜索,则是向下的下一个,?...搜索则是向上的下一个) N 上一个匹配(同上) :%s/old/new/g 搜索整个文件,将所有的old替换为new :%s/old/new/gc 搜索整个文件,将所有的old替换为...,长跳 0 跳至行首,不管有无缩进,就是跳到第0个字符 ^ 跳至行首的第一个字符 $ 跳至行尾 gg 跳至文件的第一行 gd 跳至当前光标所在的变量的声明处 [N...]G 跳到第N行,如0G,就等价于gg,100G就是第100行 fx 在当前行中找x字符,找到了就跳转至 ; 重复上一个f命令,而不用重复的输入fx tx 与fx类似,但是只是跳转到

    6.3K30

    vim从安装到熟练,这篇文章就够了

    j的含义是grep结束后,结果停在第j项,默认是停在第一项。 vimgrep前面可以加数字限定搜索结果的上限,如 :1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。...还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令, 语法为 :[range]g/pattern/command 例如 :%g/^ xyz/normal dd。...表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。 关于range的规定为: 如果不指定range,则表示当前行。 m,n: 从m行到n行。 0: 最开始一行(可能是这样)。...如ggguG,就是把开头到最后一行之间的字母全部变为小 写。再如gu5j,把当前行和下面四行全部变成小写。 替换(normal模式) r: 替换光标处的字符,同样支持汉字。...有时一个tag可能有多个匹配,如函数重载,一个函数名就会有多个匹配。 这种情况会先跳转到第一个匹配处。 :[n]tnext -- 下一[n]个匹配。 :[n]tprev -- 上一[n]个匹配。

    4.7K10

    linux学习第二十六篇:正则介绍,grep,sed,awk命令

    正则表达式是这样解释的:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。...“$” 表示行的结尾,那么空行则可以用 “^$” 表示 [root@xie-02 grep]# grep -n 'root' /etc/passwd //在输出符合要求的行的同时连同行号一起输出 1:...命令:sed -n:打印出处理后的行 -r:加上-r参数就可以不加脱义字符 -e:可以实现多个行为 -i:可以对文件内容真正的修改,而不止是把处理后的结果显示屏幕上而没真正修改文件内容 -n:打印包含某个字符的行...,g:全局替换 [root@xie-02 sed]# sed '1,5s/root/toor/g' test.txt //在第1到第5行中把root替换为toor toor:x:0:0:toor:/toor...把test.txt中第一个单词和最后一个单词调换位置 ? 11. 把test.txt中出现的第一个数字和最后一个单词替换位置 ? 12.

    4.1K60

    vim 常用命令

    s/old/new/ 用old替换new,替换当前行的第一个匹配 s/old/new/g 用old替换new,替换当前行的所有匹配 %s/old/new/ 用old替换new,替换所有行的第一个匹配...%s/old/new/g 用old替换new,替换整个文件的所有匹配 :10,20 s/^/ /g 在第10行知第20行每行前面加四个空格,用于缩进。...,这里的Esc是必须的,否则命令不生效。 w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。...拷贝和粘贴 yy 拷贝当前行 nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。 p 在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。...利用p命令可以对剪切的内容进行粘贴 :1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。 :1, 10 m 20 将第1-10行移动到第20行之后。

    1.4K21

    vim配置即.vimrc文件的配置及vim操作技巧

    g的含义是如果一个模式在一行中多次出现,则这一行也在结果中多次出现。j的含义是grep结束后,结果停在第j项,默认是停在第一项。...如:%s/old/new/gc,加上i则忽略大小写(ignore)。还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,语法为 :[range]g/pattern/command。...表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。 关于range的规定为: 如果不指定range,则表示当前行。 m,n: 从m行到n行。 0: 最开始一行(可能是这样)。...编辑多个文件 9.1 一次编辑多个文件 我们可以一次打开多个文件,如 vi a.txt b.txt c.txt 使用:next(:n)编辑下一个文件。 :2n 编辑下2个文件。...有时一个tag可能有多个匹配,如函数重载,一个函数名就会有多个匹配。 这种情况会先跳转到第一个匹配处。 :[n]tnext -- 下一[n]个匹配。 :[n]tprev -- 上一[n]个匹配。

    4.1K11
    领券