假设我有一个包含以下内容的文件:
$newsheet -> getProtection() -> verifyPassword('MyPassword');
我希望以“lmtp_bind_address6”开头,以及以空格开头的所有后续行:
lmtp_bind_address (default: empty)
The LMTP-specific version of the smtp_bind_address configuration parameter. See there for details.
This feature is available in Postfix 2.3 and later.
lmtp_bind_address6 (default: empty)
The LMTP-specific version of the smtp_bind_address6 configuration parameter. See there for details.
This feature is available in Postfix 2.3 and later.
lmtp_body_checks (default: empty)
The LMTP-specific version of the smtp_body_checks configuration parameter. See there for details.
This feature is available in Postfix 2.5 and later.
如何在bash中执行此操作?
我正在离开Centos 7并在Debian 8上设置Postfix。因此,我打算阅读“man 5 postconf”,它是Postfix版本2.11.3的7255行。为了加快速度,我想在手册页中对Postfix选项进行分组,但是对于不同的协议,例如:
lmtp_bind_address6 (default: empty)
The LMTP-specific version of the smtp_bind_address6 configuration parameter. See there for details.
This feature is available in Postfix 2.3 and later.
正如您在上面所看到的,这四个选项中的每一个都可以选择TLS密码,但是对于不同的协议(SMTPD,LMTP等)。
首先,我按照以下方式对Postfix选项进行分组:
smtpd_tls_mandatory_ciphers
lmtp_tls_mandatory_ciphers
smtp_tls_mandatory_ciphers
tlsproxy_tls_mandatory_ciphers
然后,我将联机帮助页面转储到文件中:
postconf | awk -F"=" '{print $1}' | sed 's/ //g' | rev | sort | \
rev > postconf_options.txt
现在,我想通过分组列表并将每个匹配转储到以下行,以空白开头,转到第三个文件:
man 5 postconf > postconf_manpage.txt
上面的grep命令只给出了匹配的行,但不是以空格开头的以下行。
我使用sed的双引号以便能够使用变量。以下是hek2mgl解决方案的完整程序:
cat postconf_options.txt | while read I; do
grep -w "^$I" postconf_manpage.txt
done > postconf_manpage_grouped.txt
答案 0 :(得分:2)
我会使用sed
:
sed -n '/^lmtp_bind_address6/{p;:a;n;/^[[:space:]]\|^$/{p;ba}}' file
/^lmtp_bind_address6/
匹配搜索模式{p;:a;n;/^[[:space:]]\|^$/{p;ba}}
会使用p
打印该行,定义一个标签:a
,用作跳转标记,以便能够以空格开头的行进行迭代。 n
将读取另一行到模式缓冲区。 /^[[:space:]]\|^$/
匹配以空格或为空的行开头。如果是这种情况,则会使用p
打印该行,然后我们将使用a
跳回ba
。答案 1 :(得分:1)
我希望以" lmtp_bind_address6"开头的行开头以及以空格开头的所有后续行
你可以使用这个awk:
awk 'p && /^[^[:blank:]]/{p=0} /^lmtp_bind_address6/{p=1} p' file
lmtp_bind_address6 (default: empty)
The LMTP-specific version of the smtp_bind_address6 configuration parameter. See there for details.
This feature is available in Postfix 2.3 and later.
/^lmtp_bind_address6/{p=1}
在第一行找到所需模式时设置p=1
p && /^[^[:blank:]]/{p=0}
在设置p=0
时以及在第一行找到非空白字符时重置p
。