【发布时间】:2014-03-02 18:36:28
【问题描述】:
背景:我有一个相当简单的bash 脚本,我用它来生成CSV 日志文件。作为该 bash 脚本的一部分,我使用netcat 轮询我网络上的其他设备。 netcat 命令返回一个信息流,我可以将其通过管道传送到 grep 命令中,以获取我在 CSV 文件中需要的某些值。我将返回值从grep 保存到bash 变量中,然后在脚本结束时,我将所有保存的bash 变量写到CSV 文件中。 (很简单。)
我想做的改变是我必须为每条要保存的信息发出的netcat 命令的数量。对于每个发出的netcat 命令,我都会返回所有可能的值(因此每次都返回相同的数据并且对网络来说是负担)。所以,我想只使用一次netcat 并根据需要多次解析返回值来创建bash 变量,这些变量以后可以连接在一起成为CSV 文件中的单个记录我是创造。
具体问题:如果我将netcat 命令的输出传递给使用> 的文件(相对于当前的grepmethod),则使用bash 语法我得到一个文件每个条目都在自己的行上(大概用 \n 作为 EOL 记录分隔符分隔——对于 perl 正则表达式很容易)。但是,如果我将netcat 的输出直接保存到bash 变量中,并回显该变量,则所有数据都混杂在一起,因此解析起来很麻烦(不是那么容易)。
我玩过两种选择:首先,我认为 perl 单行可能是一个很好的解决方案,但我不确定如何最好地执行它。伪代码可能是将netcat 输出保存到一个bash 变量,然后以某种方式找出如何用perl 解析它(虽然不是直截了当)。
第二种选择是使用bash 的> 并将netcat 的输出发送到一个文件。这将很容易使用perl 和正则表达式(给定\n EOL)来处理,但这需要打开一个外部文件并将其传递给perl 脚本进行处理,然后以某种方式将其返回值传递回bash 脚本作为bash 变量用于进入CSV 文件。
我知道我在这里遗漏了一些简单的东西。有没有办法可以强制从netcat 进入bash 变量的换行符,然后针对该变量重复运行一个perl-one 衬里来创建我需要的每个CSV 变量——都在同一个@ 987654357@ 脚本?抱歉,问题很长。
【问题讨论】:
-
字太多,代码不够
-
我打赌你能写出一个具体问题 as一个具体问题 -- 一句话,或者二。另外,向我们展示一些代码、输入和输出,并指出你的方法出了什么问题。
-
你们在抱怨太多的词和没有足够的代码......不要再偷懒了。 secJ 试图尽可能详细地说明他的问题。