regex - 用其他文件中的行替换行号

标签 regex perl sed awk pattern-matching

我正在寻找一种优雅的方法,用从第 2 行开始的 file2 的所有行替换 ASCII-file1 中的一行行。 file1 中要替换的行封装在空行 nr.2 和 nr.3 中。

file1 中 block 的第一行和最后一行的编号对于一堆文件是固定的,但需要更通用的解决方案。

文件1:

first
text
block
                        #blank line
second textblock
                        #blank line
third
text
block
                        #blank line

文件2:

first line
all
the 
other
lines

替换后的预期文件1:

first
text
block
                        #blank line
second textblock
                        #blank line
all
the 
other
lines
                        #blank line

最佳答案

awk 的一种方式:

$ match="second textblock"

$ awk 'NR==FNR&&!p;$0~m{print p;p=1};NR>FNR&&FNR>1' m="$match" file1 file2
first
text
block
                     #blank line               
second textblock

all                  #blank line
the 
other
lines
                     #blank line

关于regex - 用其他文件中的行替换行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167627/

相关文章:

sed - 逃避美元符号

regex - 需要 SED 或 AWK 脚本来做 strlen 优化

javascript - DataTables 正则表达式搜索无法按预期精确匹配

php - 匹配正则表达式中的所有内容,直到达到某个字符串 PHP

java - 如何在java中使用正则表达式解析给定的字符串

perl - 为什么 "fork inside BEGIN ... a horrible prospect"在 Perl 中?

linux - 如何在同一文件中添加行数

Perl,获取所有哈希值

linux - 如何从平面文件中剪切列数据

sed 替换以特定模式开头的行中的单词