【问题标题】:how to replace the first line of a file with the first line of another file [duplicate]如何用另一个文件的第一行替换文件的第一行[重复]
【发布时间】:2018-08-05 23:46:41
【问题描述】:

我有 2 个 txt 文件:file1 和 file2 我想用 bash 命令将 file2 的第一行替换为 file1 的第一行

文件 1:

aaaaaaaa
bbbbbbbb
cccccccc

文件2:

zzzzzzzz
yyyyyyyy
wwwwwwww

file2 的预期结果:

aaaaaaaa
yyyyyyyy
wwwwwwww

这不能用 sed 来完成,因为您不知道用什么替换什么...我是对的?那该怎么做呢?

编辑:

所以在我的特殊情况下(我在我的 openwrt 路由器中这样做),有效的是:

sed -i "1c $(sed 1q file1)" file2

感谢 @Sundeed 提供的链接,该链接解释了为什么某些命令只在 shell 中显示结果而不在文件中写入:https://mywiki.wooledge.org/BashPitfalls#cat_file_.7C_sed_s.2Ffoo.2Fbar.2F_.3E_file

【问题讨论】:

  • 你自己尝试了什么?
  • 我不是 bash 大师,我有一些例子说明如何用你知道的文件中的另一个文本替换你知道的文本。我没有找到任何示例,其中包含您不知道的文本从一个文件到另一个文件中的文本您也不知道。这就是我问的原因。

标签: bash text sed replace


【解决方案1】:

这可能对你有用(GNU sed):

sed -e '1R file1' -e '1d' file2

读取file2的第一行。读取 file1 的第一行并将其插入到输出中,然后删除 file2 的第一行。现在读取并输出 file2 的其余部分。

【讨论】:

  • 我试过了:sed -e '1R /etc/shadow' -e '1d' /overlay/$(cat /proc/banktable/inactive)/etc/shadow 它说:sed: unsupported命令 R(我在 OpenWRT 路由器上执行此操作)
【解决方案2】:

只需使用 headtail 完成此任务:

head -n 1 Input_file1 && tail -n 2  Input_file2

输出如下:

aaaaaaaa
yyyyyyyy
wwwwwwww

【讨论】:

【解决方案3】:

你当然可以用sed 做到这一点,但你为什么要这样做呢?

sed "1c\\
$(sed 1q file1)
" file2

【讨论】:

  • whouaou,谢谢你,威廉!那么 1c 和 1q 的含义是什么?我什至在手册中都找不到这个gnu.org/software/sed/manual/sed.html
  • 当我这样做时: sed "1c $(sed 1q /etc/shadow)" /overlay/$(cat /proc/banktable/inactive)/etc/shadow 它不会改变行并在 shell 中显示文件的内容...我在 OpenWrt 路由器中执行此操作,所以可能没有使用所有可能的选项编译 sed?
  • 这是有效的:sed "1c $(sed 1q file1)" file2 | tee file3 但我不想创建 file3 !如果我使用 | tee file2 我只是创建了一个空的file2,所以看起来如果file2被sed打开,我无法覆盖它?!
  • potong 的 sed 解决方案确实比这个好很多。我的解决方案是我永远不会考虑使用的,potong 的实际上是合理的。
【解决方案4】:

或与 ed

f1="file1";f2="file2";printf "%s\n" '2,$d' "r $f2" '2d' "wq $f2" | ed -s "$f1"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2019-01-04
    • 2021-06-12
    • 2012-11-24
    • 2019-07-12
    • 2017-03-26
    • 2015-02-01
    相关资源
    最近更新 更多