我的问题是以下一个的变体:
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。
谢谢大家!
答案 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"
。
希望它有所帮助。