【问题标题】:I want to extract any text between two symbol我想提取两个符号之间的任何文本
【发布时间】:2019-07-31 23:28:25
【问题描述】:

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

似乎因为有很多 [[ 和 ]],所以它很混乱,或者它没有在所有输出行上工作

【问题讨论】:

    标签: linux shell command-line


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 2016-08-13
      • 2018-10-04
      • 2013-05-14
      • 1970-01-01
      相关资源
      最近更新 更多