我想从Mockito.initMocks(this)
命令中检索版本号。
输出:
rsense -version
我尝试过的事情:
如果我将输出保存在一个文本文件中,请说output.txt并执行此命令 rsense version 0.5.18
Usage: rsense <start|stop|restart>
。我得到要求的结果,即awk 'NR == 1 {print $3}' /Users/poornima/Desktop/output.txt
。
但是 0.5.18
不起作用。输出:
rsense -version | awk 'NR == 1 {print $3}'
答案 0 :(得分:2)
我没有function ageCount() {
var date1 = new Date();
var dob = document.getElementById("dob").value;
var date2 = new Date(dob);
var pattern = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
if (pattern.test(dob)) {
var y1 = date1.getFullYear();
var y2 = date2.getFullYear();
var age = y1 - y2;
document.getElementById("age").value = age;
document.getElementById("age").focus ();
return true;
}else {
alert("Invalid date format. Please Input in (dd/mm/yyyy) format!");
return false;
}
}
,但是某些程序将其版本号写入rsense
,而不是stderr
。试试:
stdout
rsense -version 2>&1 | awk 'NR == 1 {print $3}'
的含义:为文件流分配了编号,称为文件描述符(fds):
0为2>&1
,默认情况下为键盘,重定向符号stdin
或<
1是0<
,默认情况下是屏幕,重定向符号stdout
或>
2是1>
,默认情况下(无缓冲)屏幕是重定向符号stderr
。
我们可以重定向到以2>
为前缀的文件或另一个文件描述符(请参阅&
)。
因此man dup2
意味着将文件描述符2(stderr)重定向到文件描述符1(stdout)。这是因为管道2>&1
仅将左侧的|
连接到右侧的stdout
–而不使用stdin
(fd 2)。
这里是使用stderr
数组而不是bash
语言的替代方法(理论上,这应该更有效,因为它避免了加载和运行awk
外部进程):< / p>
awk
顺便说一句,您的问题要求输入最后字。在a=($(rsense -version 2>&1))
echo ${a[2]} # arrays count from zero, awk counts from 1
中,应为:
bash
echo ${a[-1]} # assumes a recent version of bash
中的为:
awk
在awk '{print $NF}'
中,awk
给出了字段数。
答案 1 :(得分:0)
使用标准的Unix文本处理工具,有几种方法可以实现相同的目标。
cut
rsense --version | head -n 1 | cut -f3 -d' '
head -n 1
仅输出其输入的第一行。
cut -f3 -d' '
输出3
rd f
,使用空格(' '
作为输入d
分隔符(默认分隔符)是制表符)。
sed
rsense --version | sed -n "1s/^rsense version //p"
不再需要head -n 1
,因为可以指示sed
处理输入的哪几行。
"1s/^rsense version //p"
是sed
程序。它告诉sed
:
1
-命令的其余部分仅适用于输入的第一行; s/^rsense version //
-s
搜寻^rsense version
并用空字符串替换(替换字符串在第二个和第三个/
字符之间提供); ^
表示字符串的开头;搜索字符串的其余部分与输入字符串完全匹配;总而言之,此处提供的搜索字符串表示“ rsense version
在行首” (请注意version
之后的空格字符)。p
-p
替换后将其删除。 -n
告诉sed
不要打印其输入(默认情况下,这是这样工作的)。除非使用p
命令特别要求(除非我们只打印第1 st 行),否则这将抑制任何输出。
bash
数组a=($(rsense --version | head -n 1))
echo ${a[2]}
通过将命令包装在$()
中,将捕获并使用其输出来代替命令。执行rsense --version | head -n 1
之后,第一行与a=(rsense version 0.5.18)
相同。
文本周围的花括号创建一个bash数组。每个作品都是数组中的一个条目。数组从0
开始进行数字索引。文本的第三个单词成为索引2
上的值。
${a[2]}
是数组a
中存储在索引2
处的值(在这种情况下为所需的版本号)。