我基本上试图用命令行(linux)中的另一个文本文件的整个内容替换单行文本。知道怎么做吗?
答案 0 :(得分:2)
您可以尝试此sed
,
sed -e '/trigger/r newfile' -e '/trigger/d' org_file
下面,
在newfile
中找到trigger
时, org_file
会在内容中插入内容。
<强>测试强>
$ cat > org_file
line 1
line 2
line 3
trigger
line 6
line 7
$ cat > newfile
line 4
line 5
$ sed -e '/trigger/r newfile' -e '/trigger/d' org_file
line 1
line 2
line 3
line 4
line 5
line 6
line 7
答案 1 :(得分:0)
以下是使用awk
awk 'FNR==NR {a[NR]=$0;f++;next} /trigger/ {for (i=1;i<=f;i++) print a[i];next}1' newdata orgfile
它将newdata
存储在数组a
中
在trigger
中找到orgfile
时,请将其替换为数组a
如果您需要更改一行并知道行号更改/trigger/
更改为FNR==20
答案 2 :(得分:0)
使用sed
的sat答案的变体,不需要阅读org_file.txt
两次:
sed '/trigger/{
r newfile.txt
d
}' org_file.txt
或者换行次数更少:
sed '/trigger/{r newfile.txt
d}' file.txt
有一个缺点:它不是一个单行,因为r
命令将其后面的所有内容解释为文件名(更多详情here)。
Peter.O提供了一种解决方法(见上面的链接):
sed -f <(sed 's/\\n/\n/'<<<'/trigger/{r new_file.txt\nd}') org_file.txt