如何在文件中的某个字符串之后插入文本(在 OSX 上)?

如何在文件中的某个字符串之后插入文本(在 OSX 上)?

我已按照这篇文章中的说明进行操作如何在文件中的某个字符串后插入文本?

但我怀疑这些说明对 OSX 无效。

我想使用 Bash 将一些文本添加到源文件中

sed '/pattern/a some text here' ${sourceFile}

但是当我运行命令时我得到

“/pattern/a some text here”:命令 a 需要 \ 后跟文本

编辑

infile我创建了一个名为单行的新文件

pattern

和一个 bash 脚本

#!/bin/bash
sed '/pattern/a\
text to insert' infile

运行脚本会将“pattern”回显到控制台,但不会插入文本

编辑

我也尝试过 bash 脚本

#!/bin/bash
sed '/pattern/a\
add one line\
\\and one more' infile

和终端回声

pattern
add one line
\and one more

但 infile 仍然只有一行

pattern

答案1

我不确定 OSX 是否有ed(找到一个积极暗示),所以这是另一个选择:

grep -q pattern infile && ed -s infile  <<< $'/pattern/\na\ntext to insert\n.\nw\nq' > /dev/null

这会将以下命令发送到ed

  1. /pattern/-- 搜索“模式”
  2. a-- 在该行之后附加以下文本
  3. text to insert- 文本
  4. .-- 插入文本的末尾
  5. w-- 将更新的文件写入磁盘
  6. q——退出编辑

重定向>/dev/null是沉默ed匹配行的报告pattern

我在ed命令前面加上了一个 Quiet前缀grep,以确保在要求搜索“模式”之前文件中存在该“模式” ——否则,当模式搜索失败时ed,您会感到困惑?ed

答案2

您忘记使用 的-i就地编辑选项sed。因为 sed 是一个stream editor所以不会对输入做任何改变。您需要明确地努力将输出文件移回输入或使用 -i 选项(如果可用):

#!/bin/bash
sed -i '' -e '/pattern/a\
add one line\
\\and one more' \
infile

相关内容