【问题标题】:How to pipe a command result to a -<character><argument> option? (Without spaces)如何将命令结果通过管道传输到 -<character><argument> 选项? (没有空格)
【发布时间】:2009-05-22 19:28:43
【问题描述】:

我有这组管道命令:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'

它告诉我它第一次找到星号的前一行。 现在我想把前面的几行管道传到:

head -n<that previous line number>

head 需要紧跟 -n 参数的数字,不带空格,例如:

head -n4

我该怎么做?它只是不接受添加

| head -n

在命令集的末尾。 我的搜索没有结果。谢谢!

【问题讨论】:

    标签: bash command pipe head


    【解决方案1】:

    你想用反引号代替值:

    head -n`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'` file.txt
    

    或者多行类似的东西:

    LINENO=`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'`
    head -n${LINENO} file.txt
    

    【讨论】:

    • 太棒了!非常感谢您的及时答复!
    • 我建议使用 $() 而不是反引号; $() 嵌套并且比您可以在键盘上找到的三种单引号更容易区分。
    【解决方案2】:

    你为什么不这样做:

    awk -- '{if (!/*/) print $0; else exit}' file.txt
    

    或者这个,哪个更快:

    awk -- '/*/ {exit}; {print}' file.txt
    

    【讨论】:

    • 这是个好主意,我会更好地使用它,谢谢!但是,为了与提出的问题保持一致,我将继续接受道格拉斯和亚伦的第一个答案作为有效答案。 (乔的回答也有效)。可悲的是,我仍然无法评价答案!
    【解决方案3】:

    我认为您也可以使用 xargs。比如:

    grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}' | xargs -I % head -n% file.txt
    

    【讨论】:

      猜你喜欢
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 2011-01-04
      • 2012-08-08
      相关资源
      最近更新 更多