【问题标题】:How to insert a file at the beginning for another file in bash shell [duplicate]如何在bash shell中的另一个文件的开头插入一个文件[重复]
【发布时间】:2018-03-04 00:23:00
【问题描述】:

我正在编写一个脚本:最终目标是通过从一些文件中获取内容并修改一些文件来创建一个文本文件。 我有一个fileA,它有一些不变的内容(20 行)和fileB,它是通过修改另一个文件创建的。现在我必须在fileB 的开头插入来自fileA 的所有信息。

你们能帮帮我吗?

【问题讨论】:

  • 假设您的脚本写入stdout,您可以执行{ cat fileA; yourScript; } > fileB
  • Stack Overflow 不是代码编写服务。请出示您的代码。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: linux bash shell


【解决方案1】:

cat 命令按原样读取并打印文件内容。使用>>(附加模式)将其输出重定向到另一个文件。对下一个文件重复相同的操作

cat fileA >> fileC
cat fileB >> fileC

【讨论】:

    【解决方案2】:
    Try this... cat - fileB < fileA > tmp; mv tmp fileB
    
    Example:
    
    $ cat a.sh 
    line 1
    line 2
    line 3
    
    $ cat b.sh 
    line a
    line b
    line c
    
    $ cat - b.sh < a.sh > tmp.sh
    
    $ cat tmp.sh 
    line 1
    line 2
    line 3
    line a
    line b
    line c
    
    $ mv tmp.sh b.sh
    
    $ cat b.sh 
    line 1
    line 2
    line 3
    line a
    line b
    line c
    

    【讨论】:

      【解决方案3】:
      f=$(mktemp); (head -n 20 fileA ; cat fileB ) > $f; mv $f fileB
      

      你不能直接写入fileB,因为

      cat fileA fileB > fileB
      

      会在读取之前立即销毁 fileB 以进行写入。 head -n 20 太古老了,如果你可以断言,那 fileA 要么总是有 20 行,要么更多行无关紧要。

      mktemp 不会覆盖现有文件,因此这是一种非常安全的方法。

      【讨论】:

        猜你喜欢
        • 2011-04-16
        • 1970-01-01
        • 2016-07-23
        • 2014-01-19
        • 2019-07-16
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 2017-01-15
        相关资源
        最近更新 更多