与其他文本文件行替换文本文件中的行(Replace line in text file with l

2019-10-21 00:46发布

我的问题是下面的一个变种:

庆典:在一个文本文件替换整个行

这个问题有一个给定的字符串(更换线)进行替换的文件的第N行。 就我而言,我不能只键入替换线,但我不得不从另一个文件中读取。

例如:

textfile1:

my line
your line
his line
her line

textfile2:

our line

我想从textfile2行更换textfile1 2号线。

我想我可能只是读textfile2

while IFS= read SingleLine 

等再使用$SingleLine作为替代路线,但我失败了......根据我用引号的类型(请原谅我的无知......),我结束了与文本$单线或更换有问题的行单线或刚开的错误信息: - [

我相信你能帮助我!

编辑有关的解决方案:我去的小变化内嵌解决方案

sed '2d;1r textfile2' textfile1 > newfile1 

要更换第N行,该解决方案将是(见的解释接受的解决方案评论)

sed 'Nd;Mr textfile2' textfile1 > newfile1 

用N所需的行号和M = N-1。

谢谢你们!

Answer 1:

使用sed

sed '2d;1r file2' file1
my line
our line
his line
her line

为了使联编辑:

sed -i.bak '2d;1r file2' file1


Answer 2:

我会去的sed解决方案anubhava公布。 以下是在一个替代bash

#!/bin/bash

while read -r line; do 
    (( ++linenum == 2 )) && while read -r line; do 
        echo "$line"
        continue 2    # optional param to come out of nested loop
    done < textfile2
    echo "$line"; 
done < textfile1

或使用awk

awk 'FNR==2{if((getline line < "textfile2") > 0) print line; next}1' textfile1


Answer 3:

这是脚本或直接从终端? 如果这是一个脚本。 你可以尝试存储文件2到变量fromfile2=$(cat textfile2)然后用您的替换textfile1 sed -i "s/your line/$fromfile2" 希望能帮助到你。



文章来源: Replace line in text file with line from other text file
标签: bash replace