使用命令行linux将文本文件的全部内容插入单行位置

时间:2014-07-11 05:22:00

标签: bash command-line sed str-replace

我基本上试图用命令行(linux)中的另一个文本文件的整个内容替换单行文本。知道怎么做吗?

3 个答案:

答案 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