Unix noob在这里。我正在开发一个简单的查找/替换的unix脚本。该脚本用于查找以“_development”结尾的行,然后添加包含字符串“password:test”的新行。
#!/bin/sh
sed -e 's/$"_development"/ a\ password: test/' original_file > new_file
我运行时没有出现任何错误,但它实际上并没有我需要的东西。它添加了新行,但不添加字符串。我认为这种语法应该有效。我在Mac上开启这个问题是否重要?最重要的是,我做错了什么?
答案 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/'