bash - 从文件中捕捉序列的开始

标签 bash sed awk grep

我有一个这样的文本文件:

      125
      126
      127    {
      566
      567
      568
      569       # blah blah
      570    {  #blah blah
      700
      701    {

数字左对齐,模式在递增的意义上总是相同的,末尾有花括号。我只需要捕获起始数字。大括号总是被找到并限制在序列结尾。开始文件的名称以“125”开头。

简而言之,我需要:

      125
      566
      700

我想出了什么:

      grep -A1 '{' | grep -v '{' | grep -oE '(^[0-9]+?)'

但这省略了“125”,但我通过在头部添加换行符并插入 { 来克服。

我希望将其简化为一个正则表达式。

欢迎提出建议和更好的算法

最佳答案

awk 'BEGIN {p=1} p==1 {print $1;p=0} $0~/{/ {p=1}'

Output:
125
566
700

鉴于上面的文件格式,您可以使用 awk 和变量/标志来跟踪何时找到空缺 {

关于bash - 从文件中捕捉序列的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413490/

相关文章:

bash - 我在这里对这些变量做错了什么?

linux - 使用 grep 提取匹配后的第一个单词

linux - 用文件中的混合特殊字符替换文本

bash - egrep 结果到 vim 作为行引用的文件列表

python - 如何从 Jupyter Notebook 中的 Python 字符串执行 bash 脚本?

bash - 如何从第二次出现到文件末尾删除?

linux - 如何使用正则表达式有效地将参数附加到多个不同的 grub 配置文件

linux - CSV 上的复杂 awk 循环

awk - 如果冒号后不存在数据,则使用 sed 删除记录

awk - 为什么 awk 删除空行