【问题标题】:Elegant way to print the pattern into single awk or sed command将模式打印到单个 awk 或 sed 命令的优雅方式
【发布时间】:2023-08-08 17:12:01
【问题描述】:

我正在寻找一种模式并希望从该搜索模式中打印第一行,尽管我可以通过 sed & awk 做到这一点,但寻找一个短路的衬里,我尝试了以下两种产生整个输出的方法..

# dmidecode | awk 'NR == 1 || /Product/'
# dmidecode 3.0
        Product Name: SYS-749P-TR
        Product Name: X11DPi-N
        Product Name: SYS-7049P-TR
        Product Name: X11DPi-N

第二:

# dmidecode | awk '/Product/ || NR == 1'
# dmidecode 3.0
        Product Name: SYS-749P-TR
        Product Name: X11DPi-N
        Product Name: SYS-7049P-TR
        Product Name: X11DPi-N

通过多管道方式使用时,它可以工作。

# dmidecode | awk '/Product/' | awk 'NR==1{print $3}'
Product Name: SYS-749P-TR

# dmidecode | grep Product | sed -n 1p
Product Name: SYS-749P-TR

【问题讨论】:

  • 请在代码标签中发布您的示例 Input_file 和预期输出,因为您声称发布的答案不起作用(根据您的要求给出)。

标签: awk sed


【解决方案1】:

如果我理解正确,您想在包含Product 的第一行打印第三个字段。如果是这种情况,请尝试:

dmidecode | awk '/Product/{print $3;exit}'

【讨论】:

    【解决方案2】:

    尝试关注一次,如果有帮助,请告诉我:

    awk 'FNR == 1 || (/Product/ && ++count==1)'  Input_file
    

    解决方案 2: 仅当您想查找第一次出现的 Product 以及 Input_file 的第一行,然后从 Input_file 中出来,然后以下可能帮助你。

    awk 'FNR == 1 || /Product/{print;exit}'  Input_file
    

    【讨论】:

    • 两者都没有工作,虽然改变FNR == 2为你给出的第一个有效的操作,但它没有正确处理pattern搜索,因为它只打印# dmidecode 3.0
    • @donovan,根据您的要求给出了命令,请务必在代码标签中显示您的示例 Input_file 和预期输出,然后我也会根据您的需要进行调整。