假设我有一个配置文件/etc/emails.conf
email1 = [email protected]
email2 = [email protected]
email3 = [email protected]
我想收到电子邮件2
我可以做一个:
grep email2 /etc/emails.conf | cut -d'=' -f2
获取 email2,但如何使用一个 sed 或 awk 命令“更酷”地完成它并删除 cut 命令留下的空白?
答案1
使用 awk 怎么样?
awk -F = '/email2/ { print $2}' /etc/emails.conf
-F =
字段由“=”分隔'/email2/ { print $2}'
在与“email2”匹配的行上,打印第二个字段
答案2
这精确的等效项是这样的:
sed -n '/email2/{s/^[^=]*=\([^=]*\).*/\1/;p;}' < file
但你可能想要:
sed -n 's/^[^=]*email2[^=]*=[[:blank:]]*//p' < file
(即email2
仅匹配第一个之前的部分=
,并返回第一个右侧的所有内容=
(跳过前导空格),而不仅仅是第二个之前的部分(=
如果有)。
答案3
perl -nlE 's/email2\s*=\s*// and say' file
在哪里:
perl -nl
是每行做...s/email2 = //
删除搜索到的电子邮件 ID,如果你可以这样做......say
打印当前输入的输入行\s*
零个或多个空格(相当于 [ \t\n]*)
答案4
无需将字段分隔符设置为任何特殊值,例如“=”。默认情况下,AWK 使用连续的空格和制表符作为字段分隔符,这些分隔符会被跳过,因此它将把文件的每一行解释为具有三个字段,而第三个字段上没有任何前导空格
awk '/^email2/ { print $3 }'
产生
[email protected]
上面也将匹配任何以 开头的行email2
,例如email20
,为了精确匹配,您可以使用
awk '$1 == "email2" { print $3 }'