我已按照这篇文章中的说明进行操作如何在文件中的某个字符串后插入文本?
但我怀疑这些说明对 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
:
/pattern/
-- 搜索“模式”a
-- 在该行之后附加以下文本text to insert
- 文本.
-- 插入文本的末尾w
-- 将更新的文件写入磁盘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