哇,这在标题中听起来如此复杂,但我认为并非如此。
我有基本上具有这种布局的文本文件:
Stimulus ...
...
...
...
Response
Stimulus ...
...
...
...
Response
我使用 sed 来获取两者之间的所有内容,然后进一步提取我需要的信息。
sed -n -e '/Stimulus/,/Response/ p'
但是,有时参与者没有响应,在这种情况下,文件如下所示:
Stimulus ...
...
...
...
Stimulus ...
...
...
...
Response
在这种特殊情况下,我的脚本将无法获得我正在寻找的内容。因此,我正在寻找一种方法来提取信息,当且仅当模式 1 后跟模式 2 而不是模式 1 时。
如果我表述不清楚,请告诉我。我更乐意提供进一步的信息。
最佳答案
一种肮脏的方法,虽然它在我的测试中似乎有效,但可能是反转文件内容,从 Response
搜索至 Stimulus
并再次反转结果。
假设以下输入数据:
Stimulus 1...
...
...
...
Stimulus 2...
...
...
...
Response 2
Stimulus 3...
...
...
...
Response 3
Stimulus 4...
...
...
...
Stimulus 5...
命令:
tac infile | sed -ne '/Response/,/Stimulus/ p' | tac -
产量:
Stimulus 2...
...
...
...
Response 2
Stimulus 3...
...
...
...
Response 3
编辑 :以隔离
Response
为例部分。需要过滤两次(基于 OP 的评论):tac infile |
sed -ne '/Response/,/Stimulus/ p' |
tac - |
sed -ne '/Stimulus/,/Response/ p'
关于regex - 从文本文件中的重复范围模式中获取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17365980/