linux - 防止空格成为for循环bash/shell中的定界符

标签 linux bash oracle shell sed

我有一个变量/文件 (segment_size_date) 其中包含

11-Jul-2017 11:00,604;13-Jul-2017 10:00,604;

它是存储过程(oracle)的输出

我想用';'分隔内容因此 11-Jul-2017 11:00,604 在一个变量中,但它正在使用空格分隔。

for i in (echo $segment_size_date | sed "s/;/ /g")
do
    echo "$i"
done

我得到的输出是

(11-Jul-2017) 1st line
(11:00,60413-Jul-2017) 2nd line
(10:00,604) 3rd line

我期待这样的输出

(11-Jul-2017 11:00,604) 1st line
(13-Jul-2017 10:00,604) 2nd line

我希望它存储在一个变量/文件中。例如。在第一个循环 11-Jul-2017 11:00,604 存储在一个文件/变量中(我将处理它),下一个循环 13-Jul-2017 10:00,604 被存储(覆盖不是问题)

我试过使用引号但没有成功。 “2017 年 7 月 11 日 11:00,604” “2017 年 7 月 13 日 10:00,604”

还有一件事我不能在空白处插入任何东西 像 11-Jul-2017 11:00,604;13-Jul-2017 10:00,604 -- 我不能在空白处插入任何东西 (11-Jul-2017 11:00),它应该是这样的。

而且文件只是演示,它包含很多行,所以不能使用 cut -d";"-f1` ,必须使用循环。

shell /bin/bash ---- linux

最佳答案

您可能只想预处理数据,使每个数据都在一条线上。如果您在多个文件中有多行,这会很容易。

cat *-all-the-input-files | tr \; \\n | while read segment_size_data; do
...
done

如果您的数据在变量中(如您的示例所示),这将变为:

$ d="11-Jul-2017 11:00,604;13-Jul-2017 10:00,604;"
$ printf "$d" | tr \; \\n | while read var; do echo v=$var; done
v=11-Jul-2017 11:00,604
v=13-Jul-2017 10:00,604

关于linux - 防止空格成为for循环bash/shell中的定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147908/

相关文章:

c - 使用路由表查找目标地址的接口(interface)名称

linux - 将用户输入读取为整数

Linux:如何按时间对给定目录进行排序并列出文件/目录的大小

linux - 使用 source 将文件的一部分包含在 bash 脚本中

bash - 检查网页是否已更新的简单脚本

oracle - Oracle 对象的使用范围有多广?

c - 如何跟踪所有本地函数调用和退出,并将其记录到文件中以供查看

linux - 我可以防止 Linux 用户空间 pthread 在关键代码中让步吗?

java - Java SE 仍然是 GPL 吗?

regex - 用于重复字符组的 Oracle 数据库正则表达式