【发布时间】:2017-06-08 15:58:30
【问题描述】:
请考虑这个字符串:foo\nbar\nbaz
如何使用 \n 作为分隔符来拆分它?
我玩过 IFS,但运气不好。
编辑:我想在 for 循环中拆分它。
好的,我会解释我的情况。
我需要使用存储在 MySQL 数据库中的数据来提供某个配置文件。
我从 TEXT 类型列中获取值。此列中的每条记录可以是空的或多个电子邮件地址 (foo@bar.tld)、域名 (bar.tld) 或包含其子域 (.bar.tld) 的域名的占位符。
根据设计,程序员决定这个字段应该是多行的,因此是分隔符。
我的工作是单独获取这些值并处理它们。所以我遍历这些值并对它们做一些事情。
真正的问题是我得到一个两个字节的分隔符,就像这样:
foo@bar.tld\nfoo.tld\n.foo.tld
所以我不能单独访问每个元素。
希望你现在能理解(英语不是我的母语)。
EDIT2:
现在我正在用这段代码解决问题:
PERMITTED_SENDERS="foo@bar.tld\nfoo.tld\n.foo.tld"
for SENDER in ${PERMITTED_SENDERS//'\n'/ }
do
if [[ "$SENDER" =~ @ ]]
then
printf "\tsender == $SENDER\n"
elif [[ "$SENDER" =~ ^\. ]]
then
printf "\tsender =~ [@|.]$(to_tld_domain $SENDER)\$\n"
else
printf "\tsender =~ \@$(to_regex $SENDER)\$\n"
fi
done
@CharlesDuffy 是 for 循环仍然无法解决这个问题吗?
EDIT3
在彻底阅读 mysql 帮助后,我结束了将 -r 传递给 mysql 命令以获取原始格式的结果。
现在我有了这个:
while IFS='' read -r permitted_sender
do
# Do stuff
done <<<"$permitted_senders"
【问题讨论】:
-
该字符串是包含 11 个字符还是 13 个字符?
-
@DavidC.Rankin 它可以是任何长度。我不想在这里使用
sed。 -
顺便说一句,考虑运行
printf '%q\n' "$var"并提供其输出——这将使文字与句法的问题变得清晰。 -
@ap,我不确定我是否认为这是一个相关的骗局。这里的 OP 正在尝试迭代片段,而不是将它们逐行拆分。