我有以下一行:
name@mail.addr [The Name], name2@mail2.addr2 [The Name 2], name3@mail.addr3 [Name 3], ...
依此类推,全部在一行($ROW
)。 (根据用户从列表中选择的多项选择输出osascript
。)
稍后在脚本中我想只在电子邮件地址上运行一个循环:
for ADDRESS in $ROW ; do
默认情况下会使用空格作为分隔符。
所以我需要删除每个“[”(包括前面的空格)和下面的“]之间的所有内容,”......这样结果就是
name@mail.addr name2@mail2.addr2 name3@mail.addr3 ...
直到行尾(变量)。
问题是我在macOS上这样做,它有BSD版本的sed,awk等,直到现在我才能找到GNU解决方案。我确实安装了coreutils,所以我可以用GNU来做,但是这个脚本意味着将macOS分发给其他可能没有安装coreutils的Mac用户,所以GNU sed,awk等都不是一个选项。
答案 0 :(得分:1)
希望这适合你:
product startdate enddate quarter `mean(price)`
<int> <date> <date> <chr> <dbl>
1 1 2012-03-17 2016-09-08 Q1 2012 10
2 1 2012-03-17 2016-09-08 Q1 2013 10
3 1 2012-03-17 2016-09-08 Q1 2014 10
4 1 2012-03-17 2016-09-08 Q1 2015 10
5 1 2012-03-17 2016-09-08 Q1 2016 10
6 1 2012-03-17 2016-09-08 Q2 2012 10
7 1 2012-03-17 2016-09-08 Q2 2013 10
8 1 2012-03-17 2016-09-08 Q2 2014 10
9 1 2012-03-17 2016-09-08 Q2 2015 10
10 1 2012-03-17 2016-09-08 Q2 2016 10
11 1 2012-03-17 2016-09-08 Q3 2012 10
12 1 2012-03-17 2016-09-08 Q3 2013 10
13 1 2012-03-17 2016-09-08 Q3 2014 10
14 1 2012-03-17 2016-09-08 Q3 2015 10
15 1 2012-03-17 2016-09-08 Q3 2016 10
16 1 2012-03-17 2016-09-08 Q4 2012 10
17 1 2012-03-17 2016-09-08 Q4 2013 10
18 1 2012-03-17 2016-09-08 Q4 2014 10
19 1 2012-03-17 2016-09-08 Q4 2015 10
该命令会删除sed 's/\[[^[]*\],//g' <<< $ROW
和[
之间的所有内容,方法是搜索空方括号],
,然后是其他任何不是空方括号\[
的内容,后跟结束方括号和逗号[^[*]
。
答案 1 :(得分:0)
我认为这应该适用于bsd grep
:
for address in $(echo "$ROW" | grep -Eo '[^ ]*@[^ ]*'); do
...
done