给定一个测试文件settings.py
,如下所示:
# Django settings for x project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.3/ref/settings/#allowed-hosts
ALLOWED_HOSTS = []
我想以编程方式(shell脚本)替换行之间的部分:
DATABASES = {
和:
}
变量中包含一些文本k
:
declare -r k='foo bar baz'
我是perl
初学者,但我编造了这个:
perl -ne 'if(!$f && /DATABASES/){$f=1} if(!$f){print} if($f && /^}$/){$f=0}' < settings.py
这与我通常的sed
/awk
小技巧不同:
# e.g.
sed '/DATABASES/,/^}$/ d' < settings.py
我想改进我perl
的单行!
万能的我怎么能做sed
的这么漂亮perl
呢?
什么是绝对最好的方法:
- 观看标准输入传递并将其复制到标准输出
- 检测到哨兵“停止打印”行并停止复印
- 在遇到第二个哨兵线时重新启用 stdin->stdout 的传递
我省略了任务的替换部分,希望也能得到一些帮助。