Unix语法问题添加行,前导空格和带有SED脚本的字符串

时间:2012-10-11 17:46:32

标签: unix sed

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

#!/bin/sh

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

我运行时没有出现任何错误,但它实际上并没有我需要的东西。它添加了新行,但不添加字符串。我认为这种语法应该有效。我在Mac上开启这个问题是否重要?最重要的是,我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

这样的东西应该有用,假设你正在使用可以插入换行符的sed版本(例如GNU sed):

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

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

答案 1 :(得分:1)

这对我有用:

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

假设您想要用“_development at the end”替换该行。如果您想在匹配后添加新的新行,请使用

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

这会添加\0\n以替换匹配的行,并附加新的,如Adam所建议。

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

答案 2 :(得分:1)

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

sed -e '/_development$/a\
   password: test/'