我需要执行文件(a.out),同时,我只需要输出的特定部分,而不是全部。位于这两个字符串[[..]]或((..…)之间。我也不知道其他文本的位置(没有特定的模式)和输出是什么样子的?
例如:
如果我运行文件
./a.out
我会把这个放在控制台上,
[[Execution]]
YES((g: 1.000000))
((x: 5.000000))
115940 -3080
0[[Execution]]
YES((g: 50.000000))N0
NONONO
0 0
0[[Execution]]
YES((g: -1.000000))
0[[Execution]]
相反,我想要一个文本文件,看起来像:
Execution
g: 1.000000
x: 5.000000
Execution
g: 50.000000
Execution
-1.000000
Execution
我试过grep/sed/tr,但每次都有不同的结果。
我还想在执行程序的同时使用它们
例如
./a.out | sed |grep
更新:
我尝试了不同的命令,它们都给了我相同的结果,而没有改变我的输出。
./a.out | grep -o -P '(?<=[[).*(?=s]])'
./a.out | sed -n '/[[/,/]]/p'
./a.out 2>&1 | sed -e 's/.*[[\(.*\)]]/\1/'
似乎是因为有许多[和]],所以它很混乱,或者它没有在所有的输出行上工作
最佳答案
您可以使用这个sed
:
a.out | sed -En 's/.*[[(]{2}(.*)[])]{2}/\1/p'
Execution
g: 1.000000
x: 5.000000
Execution
g: 50.000000N0
Execution
g: -1.000000
Execution