在bash shell

时间:2018-04-11 15:13:26

标签: bash shell

我想编写一个带有我的文件的bash脚本:

READ_ME.MD

two
three
four

并使其成为

READ_ME.MD

one
two
three
four

有很多类似的StackOverflow问题,但我尝试了他们的答案但没有成功。

这些是我尝试过的失败的bash脚本:

test.sh

sed '1s/^/one/' READ_ME.md > READ_ME.md

结果:清除文件的内容

test.sh

sed '1,1s/^/insert this /' READ_ME.md > READ_ME.md

结果:清除文件的内容

test.sh

sed -i '1s/^/one\n/' READ_ME.md

结果:sed:1:“READ_ME.md”:无效的命令代码R

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

您可以使用此BSD sed命令:

sed -i '' '1i\
one
' file

-i会将内联更改保存到file

如果您想在顶部添加一行,如果相同的行不在那里,请使用BSD sed命令:

line='one'

sed -i '' '1{/'"$line"'/!i\
'"$line"'
}' file

答案 1 :(得分:1)

您的最后一个示例适用于GNU sed。根据您添加的错误消息,我猜您是否正在使用Mac系统?根据{{​​3}},在sed的Mac版本上可能需要后缀参数:

sed -i ' ' '1s/^one\n/' READ_ME.md

答案 2 :(得分:0)

如果这是bash或zsh,你可以使用像这样的进程替换。

% cat x
one
two 
three

% cat <(echo "zero") x
zero
one
two 
three

将其重定向到临时文件并将其复制回原始文件

答案 3 :(得分:0)

始终有ed

printf '%s\n' H 1i "one" . w | ed -s READ_ME.MD