【问题标题】:awk/sed for test commandawk/sed 用于测试命令
【发布时间】:2010-08-30 08:13:47
【问题描述】:

从我的 ksh 我有

  [[  ` echo $READ_LINE | awk '{print $2}' ` != SOME_WORD  ]] && print "not match"

我可以得到建议如何在没有 echo 命令的情况下验证相同的内容吗? (也许 awk/sed 适合这个?)

莉迪亚

【问题讨论】:

    标签: awk ksh


    【解决方案1】:

    这样的事情会起作用:

    awk -v x="$READ_LINE" -v y="SOME_WORD" 'BEGIN { split(x, a); if (a[2] != y) print "not match";}'
    

    但是$READ_LINE 是从哪里来的呢?你想达到什么目的?也可能有一个很好的普通shksh 解决方案。

    我非常怀疑您声称echo(可能是内置的shell)比awk 花费更多时间的说法。这是plain sh 版本:

    set -- $READ_LINE
    [ x$2 != xSOME_WORD] && echo "not match" 
    

    ksh solution of Dennis Williamson 看起来最适合您的情况。

    【讨论】:

    • 目标是节省时间(echo take time awk not)
    【解决方案2】:
    read ign val && [ X$val != XSOME_WORD ] && echo "not match"
    

    【讨论】:

      【解决方案3】:

      这会按单词拆分行并测试第二个单词。

      var=($READ_LINE)
      [[  ${var[1]} != SOME_WORD  ]] && print "not match"
      

      你想要完成什么?您的几个问题几乎相同。

      【讨论】:

      • var=($READ_LINE) 在 ksh 中的语法无效!
      • @lidia:什么版本的 ksh?您是否使用#!/bin/ksh#!/usr/bin/ksh#!/bin/sh 作为脚本的第一行(shebang)?
      【解决方案4】:

      如果您使用的是 ksh,则只需使用 shell,而无需调用外部命令

      set -- $READ_LINE
      case "$2" in
        "SOME_WORD" ) echo "found";;
      esac
      

      既然我看到你有其他类似的线程,你为什么还要解决这个问题?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-22
        • 1970-01-01
        • 2015-11-04
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多