1

Unix 菜鸟在这里。我正在开发一个执行简单查找/替换的 unix 脚本。该脚本旨在找到以“_development”结尾的行,然后添加一个包含字符串“password:test”的新行。

#!/bin/sh

sed -e 's/$"_development"/ a\  password: test/'  original_file > new_file

运行它时我没有收到任何错误,但它实际上并没有满足我的需要。它添加新行,但不添加字符串。我认为这种语法应该有效。我在 Mac 上启动它是否重要。最重要的是,我做错了什么?

4

3 回答 3

1

如果您使用的是 Mac,很可能您需要在 sed 命令中使用文字换行符:

sed -e '/_development$/a\
   password: test/' 
于 2012-10-11T20:55:32.077 回答
1

这对我有用:

sed -e 's/.*_development.$/password: test/' original_file > new_file

假设您想用“结尾的_development”替换该行。如果您想在匹配的行之后附加新的新行,请使用

sed -e 's/.*_development.$/\0\npassword: test/' test.txt > new_file.txt

正如亚当所建议的那样,这将添加\0\n替换为匹配的行并附加新的行。

但是,我自己没有 Mac,我不能肯定地说这些对你有用。这是一篇文章,可能会提供有关在 mac 上使用 sed 换行的更多信息:http: //cafenate.wordpress.com/2010/12/05/newlines-in-sed-on-mac/

于 2012-10-11T18:32:53.590 回答
1

您的搜索模式是$"_development",它在行尾查找空字符串,后跟文字"_development"。一行结束后不可能有任何东西——你真的应该写"_development"$$总是走到最后。

假设您使用的是可以插入换行符的 sed 版本(例如 GNU sed),这样的东西应该可以工作:

sed -e 's/"_development"$/\0\n  password: test/' original_file > new_file

表示使用整个匹配的\0模式(这样我们就不会删除该"_development"部分),然后\n插入换行符。

于 2012-10-11T17:54:01.983 回答