【问题标题】:Linux awk trouble with linebreak into a variableLinux awk 将换行符转换为变量的问题
【发布时间】:2020-06-05 06:36:07
【问题描述】:

我找到了很多主题,但找不到与我的确切情况相符的内容..

当我在脚本中运行以下命令时:sudo lshw -C disk -short | grep "/dev/",我的 hdds 变量将设置为 /dev/sda 32GB VMware Virtual S /dev/cdrom VMware IDE CDR10

我可以使用 awk 来删除“/dev/”,但我会添加一个带有 /n 的换行符,所以当我执行 echo $hdds 时,它会显示类似这样的内容(而不是显示所有内容一行):

sda 32GB VMware Virtual S
cdrom VMware IDE CDR10

我确实做到了,但我无法将该结果分配给我的变量。只有当我在运行实时命令时获得输出时。

#!/bin/bash

hdds=`sudo lshw -C disk -short | grep "/dev/" | awk '{print $2,$4,$5,$6,$7,$8,$9}'`
hdd=`echo $hdds | awk '{split($hdds,hdd,"/dev/"); print hdd[2]; print " HEY \n"; print hdd[3]}'`
echo $hdd | awk '{print $hdd;}'

感谢您的帮助! 目前正在尝试在 ubuntu 18.04 下执行此操作。

【问题讨论】:

  • 您的代码存在很多问题(缺少引号、不推荐使用的反引号、尝试在 awk 脚本中使用 shell 变量等),如果您说希望 echo $myvar 拥有如果这真的是您想要的,或者您的意思是echo "$myvar"echo "$hdd",那么声明的值就是它的意图,但看起来您正在尝试将sudo lshw -C disk -short 的输出转换为其他格式。如果是这样,那么请edit 你的问题显示sudo lshw -C disk -short 的输出加上你想要的最终输出作为输入,并解释转换。
  • 您好,感谢您的回复,并对我提出问题的方式感到抱歉。正如你所问的,我确实根据你的建议重新制定了不同的形式。谢谢!
  • 真的希望您只是按照我的要求向我们展示sudo lshw -C disk -short 的输出,而不是在运行@ 后向我们展示“my hdds var”的内容987654335@ 因为我强烈怀疑问题出在您调用echo 以显示变量内容但没有看到原始命令输出的方式上,这是一个猜测。我还希望您能显示最终的预期输出,因为您有一个正在打印 HEY 的脚本,但字符串 HEY 并没有出现在您向我们展示的输出中的任何位置,所以我知道存在什么关系。

标签: bash variables awk printing echo


【解决方案1】:

我最好的猜测是sudo lshw -C disk -short 已经产生了多行输出,而你遇到的主要问题是你没有引用echo 的参数,在这种情况下你只需要:

hdd=$(sudo lshw -C disk -short | sed -n 's:/dev/::p')
echo "$hdd"

但没有看到sudo lshw -C disk -short 的输出和您预期的最终输出,这只是一个未经检验的猜测。

请参阅 https://mywiki.wooledge.org/Quoteshttp://mywiki.wooledge.org/BashFAQ/082 了解有关脚本中的引号和刻度问题的信息。

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多