【问题标题】:Replace the first line in a text file by a string用字符串替换文本文件中的第一行
【发布时间】:2012-11-06 10:44:52
【问题描述】:

我是 shell 脚本的新手,对如何使用 sed 或任何其他工具将我的文本文件中的第一行替换为字符串感到困惑。以下是文本文件内容:

/home/snehil/Desktop/j1/movie.MOV “spome 其他文本行”

我想用movie.MOV(可能是shell脚本中的变量)替换第一行(电影文件路径)

请指导我如何做到这一点。我在一些帖子中遇到了sed,我需要在这里使用sed吗?

【问题讨论】:

    标签: linux shell unix


    【解决方案1】:

    sed 是正确的工具,试试看:

    var="movie.MOV"
    sed -i "1s/.*/$var/" file.txt
    

    解释

    • 1 表示第一行
    • 剩下的是替换 s/// :我们用 $var 变量替换所有内容 (.*)

    【讨论】:

    • 您也可以使用1s:.*/:: 删除除文件名之外的所有内容,如果这是提问者真正想要的。
    • 您好 Sputnick,我正在尝试您的解决方案:但我收到以下错误 char 9: unknown option to `s' ......这是我的代码。 ......... #!/bin/sh topDirectoryPath="$1" metaFileName="movie_meta.txt" replaceName="$2" myMetaFilePath="$topDirectoryPath$metaFileName" sed "1s/.*//$replaceName /" /home/snehil/Desktop/j1/Erasure/Coding/movie_meta.txt
    • 谢谢!我在终端中获得了“回显”文件的新内容……但是如何将其写入同一个文件?即在同一个文件中写入新内容?我尝试将 sed 保存在变量中并使用 > 运算符.. 不工作:(
    • @Rookie 你可以让sed 使用-i 选项编辑文件,例如sed -i '.bak' "1s/.*/${var}/" file.txt sed 将就地编辑它并创建一个备份文件(.bak)。如果您不需要备份文件,只需为-i 选项提供sed 一个空白参数,如:sed -i '' "1s/.*/${var}/" file.txt
    • 如果我的新行包含“/”怎么办?
    【解决方案2】:

    你可以用tail轻松做到这一点:

    #I want to replace the first line
    cp test.txt test.txt.backup
    echo 'mynewfirstline'> test.txt
    #add everything from old file starting from second line
    cat test.txt.backup |tail -n+2>> test.txt
    

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 2013-04-10
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多