【问题标题】:How to remove the last line from a variable in bash or sh?如何从 bash 或 sh 中的变量中删除最后一行?
【发布时间】:2017-08-31 00:58:56
【问题描述】:

我有一个只有几行的变量。我想从变量的内容中删除最后一行。我搜索了互联网,但所有链接都在谈论从文件中删除最后一行。 这是我的变量的内容

$echo $var
$select key from table_test
UNION ALL
select fob from table_test
UNION ALL
select cal from table_test
UNION ALL
select rot from table_test
UNION ALL
$

我想去掉仅出现在最后一行的 UNION ALL。

【问题讨论】:

  • echo $var 不会产生您显示的输出,尽管echo "$var" 会。

标签: bash text-processing


【解决方案1】:

猛击方式:

echo "${var%$'\n'*}"

这将打印 $var 以及所有字符,包括。并在最后一个 LF 被移除之后。

【讨论】:

    【解决方案2】:
    echo $var | head -n -1
    

    获取除最后一行之外的所有内容。

    【讨论】:

      【解决方案3】:

      试试这个:

      last_line=`echo "${str##*$'\n'}"` # "${str##*$'\n'}" value gives the last line for 'str'
      str=${str%$last_line} # subtract last line from 'str'
      echo "${str}"
      

      【讨论】:

        【解决方案4】:

        你可以试着把最后一行删掉。

        Count=$(echo "$Var" | wc -l)
        echo "$Var" | head -n $(($Count -1))
        

        head -n $(($Count -1)) 描述了您要显示的行数。

        【讨论】:

          【解决方案5】:

          sed 可以像从文件中那样做:

          > echo "$var" | sed '$d'
          

          编辑:$ 代表文件的最后一行,d 将其删除。 详情见here

          【讨论】:

          • 可能是:var=$(sed '$d' <<< "$var")
          • 我怀疑你的变量只在一行。 echo "$var" | wc -l 返回 1 吗?
          • 是的。它返回 1。
          • 好的..我已经设法修复它。我已经添加了这个命令selectstmt=$(echo -e $var),然后执行了这个命令echo "$var"| sed '$d'
          猜你喜欢
          • 1970-01-01
          • 2011-06-20
          • 2017-01-10
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 2016-08-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多