【问题标题】:Can sed insert text with newlines into other text?sed 可以将带有换行符的文本插入其他文本吗?
【发布时间】:2016-11-04 09:46:00
【问题描述】:

如果 B 有换行符,sed 是否能够将文本 B 插入到文本 A 的中间?

我找到了如何使用 sed 将文本插入其他文本中间的示例 - 但我能找到的唯一此类示例是插入的文本是单行的。

如果插入的文本有换行符,我无法确定将文本插入其他文本的语法(甚至是可能性)。有人可以帮忙吗?

我没有嫁给 sed。我可以接受任何解决方案,但我也很好奇这是否可以使用 sed 完成。

这是我迄今为止尝试过的:

>c1="$(cat f1)"
>echo "$c1"
a
b
c
d
>c2="$(cat f2)"
>echo "$c2"
x
y
z
>echo "$c1" | sed "s,^c,c\n"${c2}","
sed: -e expression #1, char 9: unterminated `s' command
>echo "$c1" | sed "s,^c,c\n${c2},"
sed: -e expression #1, char 9: unterminated `s' command

谢谢。

【问题讨论】:

  • \n 更改为^M(通过CTRL-V、CTRL-M 获得)。

标签: bash sed newline


【解决方案1】:

在您的特定情况下,您可以使用sedr 命令读取文件并将其内容添加到输出流:

sed '/^c/r f2' f1

这应该等同于您的echo "$c1" | sed "s,^c,c\n"${c2}"," 尝试,在以c 开头的行之后添加f2 文件的内容。

请注意,我不使用substitute 命令,而是使用/^c/ 测试每一行,并对每一行匹配执行read 命令。

【讨论】:

  • 多么有趣。你的解决方案奏效了。我将不得不研究这个 sed 选项。谢谢。
  • sed 比它众所周知的 s 有更多的命令,但是根据经验,您可能会在几年内发现它们:) 至少检查 /test/ 语法,它对以下内容特别有用删除特定行 (/test/d) 或在特定行上执行多个操作(例如,/test/{N;s/pattern/repl/} 用于两行替换)
猜你喜欢
  • 2021-09-21
  • 1970-01-01
  • 2019-05-14
  • 2020-06-11
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 2023-03-07
相关资源
最近更新 更多