用其他文本文件中的行替换文本文件中的行

时间:2014-09-24 06:10:53

标签: bash replace

我的问题是以下一个的变体:

bash: replace an entire line in a text file

问题是用给定的字符串(替换行)替换文件的第N行。在我的情况下,我不能只键入替换行,但我必须从另一个文件中读取它。

例如:

textfile1:

my line
your line
his line
her line

textfile2:

our line

我想用textfile2中的行替换textfile1的第二行。

我以为我可以阅读textfile2

while IFS= read SingleLine 

等。然后使用$SingleLine作为替换线,但我失败了...取决于我使用的引用类型(请原谅我的无知......)我最终用文本替换了有问题的行$ SingleLine SingleLine 或只是收到错误消息: - [

我相信你可以帮助我!!

关于解决方案的编辑: 我选择了小改变的内联解决方案

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

要替换第N行,解决方案是(请参阅有关解释的已接受解决方案的评论)

sed 'Nd;Mr textfile2' textfile1 > newfile1 

用N表示所需的行号,M = N-1。

谢谢大家!

3 个答案:

答案 0 :(得分:5)

使用sed

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

使其成为内联编辑:

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

答案 1 :(得分:1)

我会使用已发布的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

答案 2 :(得分:0)

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