我正在创建一个具有以下输出的文件
SQL> declare
2 v_mail_id varchar2(300);
3 begin
4 SELECT user_mail_id INTO v_mail_id FROM XYZ where col1='Test';
5 dbms_output.put_line('EMail_Id'||' = '||v_mail_id);
6
7 END;
8 /
EMail_Id = [email protected] [email protected] [email protected]
SQL> spool off;
现在我希望所有电子邮件 ID 都在一个变量中,下面是我用来获取相同内容的命令。
Mail_Id=$(awk '/EMail_Id =/{print $NF}' date091217125531.txt)
这个命令的问题是它只给我最后一个电子邮件 ID,而不是全部。有没有办法获取所有电子邮件 ID?以及应该执行什么命令。
答案1
您只获得最后一个电子邮件地址的原因是,这就是您所要求的$NF
(字面意思是“最后一个字段的值”)。
mailid=$( awk -F ' *= *' '/^EMail_Id/ { print $2 }' file.in )
这用于awk
打印后面的内容=
(删除周围的空格)。使用␣*=␣*
作为字段分隔符会将行分为两个字段:之前的位=
和之后的位。我们$2
可以访问这两个字段中的第二个(您也可以$NF
在此处使用)。
和sed
:
mailid=$( sed -n '/^EMail_Id *= */s///p' file.in )
该sed
表达式/^EMail_Id *= */s///
将首先找到匹配的行,然后对其^Email_Id *= *
应用替换。///
替换中的空模式意味着它将使用与范围表达式 ( /^EMail_Id *= */
) 中使用的模式相同的模式,空替换字符串意味着输入行的匹配部分将被删除。
的值为mailid
。[email protected] [email protected] [email protected]
如果您正在使用bash
并想要创建数组变量,请使用
mailid=( $( ... as above ... ) )