【问题标题】:Need to extract the word in between patterns需要提取模式之间的单词
【发布时间】:2020-05-15 19:48:41
【问题描述】:

我有一个文件,其中包含以下 30,000 行,我需要在第一个 {} 之间获取单词。

我试过了:

grep "{*}" out.txt

我得到了这个作为输出:

 domain { CORE_0_RX_AcScan } -sync -module { tx20rx16_n7 }
 domain { CORE_RX_Charz_ft } -sync -module { tx20rx16_n7 }
 domain { CORE_dft0_RX_Update } -clo { CORE_0_RX_Shift } -module { i3_tx20rx16_n7 }

但我需要如下输出(需要第一个 {} 之间的单词):

CORE_0_RX_AcScan 
CORE_RX_Charz_ft 
CORE_dft0_RX_Update

【问题讨论】:

  • 试试sed -n 's/^domain *{ *\([[:alnum:]_]*\) *}.*/\1/p' out.txt

标签: awk sed grep


【解决方案1】:

您能否尝试使用所示示例进行跟踪、测试和编写。

awk 'match($0,/{ [^}]*/){print substr($0,RSTART+2,RLENGTH-2)}' Input_file

第二个解决方案:考虑到您的 Input_file 与显示的 Input_file 相同。

awk -F'domain { | }' '{print $2}' Input_file

第三种解决方案:使用sed

sed 's/^ domain { \([^ }]*\).*/\1/'  Input_file

【讨论】:

    【解决方案2】:

    你可以使用

    sed -n 's/^domain *{ *\([[:alnum:]_]*\) *}.*/\1/p' out.txt > results.txt
    

    online demo

    这里,-n 抑制默认的行输出模式,^domain *{ *\([[:alnum:]_]*\) *}.* 在开头匹配 domain,然后是 0+ 个空格、{、0+ 个空格,将任何 0 个或多个字母数字或 @ 987654327@ 字符,然后是 0+ 个空格,},然后是任何文本到末尾,并将整个匹配替换为第 1 组值,p 仅打印此结果。

    或者,awk:

    awk -F' *[{}] *' '{print $2}' out.txt > results.txt
    

    这里,字段分隔符是一个正则表达式,参见-F' *[{}] *'。它匹配 0+ 个空格,然后是 {},然后再匹配 0+ 个空格,只有第 2 列的值与 {print $2} 一起输出。

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 2021-08-30
      相关资源
      最近更新 更多