我需要执行文件(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

10-05 23:21