相关疑难解决方法(0)

如何删除第一个 bash 参数并将其他参数传递给另一个命令?

在 bash 中$@包含用于调用脚本的所有参数,但我正在寻找一种解决方案来删除第一个

./wrapper.sh foo bar baz ...:

 #!/bin/bash

 # call `cmd` with bar baz ... (withouyt foo one)
Run Code Online (Sandbox Code Playgroud)

我只想打电话 cmd bar baz ...

bash parameter-passing

3
推荐指数
1
解决办法
2030
查看次数

grep输出只在bash脚本中打印单行

如何从grep中获取结果以在bash脚本中自行打印?

在终端中使用grep时,输出会显示我希望它出现的方式.

例如:

$ whois x.x.85.72 | grep 'OrgName\|NetRange\|inetnum\|IPv4'
NetRange:       x.x.85.64 - x.x.85.95
NetRange:       x.x.0.0 - x.x.255.255
OrgName:        xxxxx Technologies Inc.
Run Code Online (Sandbox Code Playgroud)

在bash中使用相同的grep命令时,它会在一行上打印出来.

我的bash脚本的输出:

$ lookup xx.com
xx.com resolves to: x.x.85.72
NetRange: x.x.85.64 - x.x.85.95 NetRange: x.x.0.0 - x.x.255.255 OrgName:xxxxx Technologies Inc.
Run Code Online (Sandbox Code Playgroud)

我的bash脚本:

#! /bin/bash
VAR1="$1"

IP=`net lookup $VAR1`
echo $VAR1 resolves to: $IP
RANGE=`whois $IP | grep 'OrgName\|NetRange\|inetnum\|IPv4'`
echo $RANGE 
Run Code Online (Sandbox Code Playgroud)

除了解决方案,谁能告诉我为什么这样做?

谢谢你!

linux bash shell grep

3
推荐指数
1
解决办法
1万
查看次数

如何将printf的输出存储在变量中?

我想将printf格式的输出存储在变量中,但由于某种原因它会删除格式.

这是正确的输出

$ printf "%-40s %8s %9s  %7s" "File system" "Free" "Refquota" "Free %"
File system                                  Free  Refquota   Free 
Run Code Online (Sandbox Code Playgroud)

现在格式化了

$ A=$(printf "%-40s %8s %9s  %7s" "File system" "Free" "Refquota" "Free %")
$ echo $A
File system Free Refquota Free %
Run Code Online (Sandbox Code Playgroud)

linux bash printf echo

3
推荐指数
2
解决办法
3211
查看次数

Bash LeftPad 变量内带有空格的字符串

我想要这样的东西:

  CUSTOMERNAME="THIS IS A TEST"
  printf "| %-30s " $CUSTOMERNAME
Run Code Online (Sandbox Code Playgroud)

但问题是,值CUSTOMERNAME有一些空间。输出如下所示:

 | THIS                           | IS                             | A                              | TEST
Run Code Online (Sandbox Code Playgroud)

但我想要这样的东西

 | THIS IS A TEST                |
Run Code Online (Sandbox Code Playgroud)

我能做些什么?有任何想法吗?

谢谢,豪克

linux bash

2
推荐指数
1
解决办法
1485
查看次数

SHELL 在特定变量的开头和结尾添加双引号

我在 shell 脚本中有一个变量,它在变量 $var1 中取一个值。如果我这样做,echo $var1我将获得例如价值波士顿。我想要的值是"Boston"

我尝试了几种情况:

var1=""$var1""
var1="""$var1"""
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都得到了结果,'$var1'但我想要"Boston" 解决方案请不要提及其中包含波士顿的解决方案。如果您只能var1在整个脚本中使用,我将不胜感激,这样可以更清楚!“Boston”只需要是脚本执行的输出和变量 var1 的初始化。

谢谢

variables bash shell double-quotes

2
推荐指数
1
解决办法
7382
查看次数

使用 jq 对 JSON 中特定字段的值求平均值

我有以下 JSON 数据。

{
   "meta":{
      "earliest_ts":1601425980,
      "latest_ts":1601482740,
      "interval":"minutes",
      "level":"cluster",
      "entity_id":"xxxxx-xxxxx-xxxxx-xxxxx-xxxxx",
      "stat_labels":[
         "status_code_classes_per_workspace_total"
      ],
      "entity_type":"workspace",
      "start_ts":"1601425980"
   },
   "stats":{
      "cluster":{
         "1601431620":{
            "3xx":2,
            "4xx":87,
            "5xx":31,
            "2xx":352
         },
         "1601472780":{
            "3xx":14,
            "4xx":296,
            "5xx":2,
            "2xx":3811
         },
         "1601479140":{
            "3xx":17,
            "4xx":397,
            "5xx":19,
            "2xx":4399
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我尝试对所有字段求平均值"3xx"

使用jq,我设法获取每个集群的密钥:

echo $data | jq -r '.stats.cluster|keys' | while read key; do 
  echo $key
done
Run Code Online (Sandbox Code Playgroud)

输出 :

[
"1601431620",
"1601472780",
"1601479140"
]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试更进一步时,我无法进一步从每个字段检索数据。我从中得到了一些启发。

下面的代码不起作用,但你明白了:

 # total var will be used to calculate the average …
Run Code Online (Sandbox Code Playgroud)

bash parsing json jq

2
推荐指数
1
解决办法
647
查看次数

Bash:用新行替换空格并在前面加上破折号

我正在尝试将以空格分隔的类别字符串替换为新行上前面带有破折号的类别

我已经用破折号替换新行

categories="cat1 cat2 cat3 cat4 cat5"

mod_categories="$(echo -e "$categories" | sed 's/ /\n- /g')"

echo $mod_categories
Run Code Online (Sandbox Code Playgroud)

哪个输出

cat1
- cat2
- cat3
- cat4
- cat5

Run Code Online (Sandbox Code Playgroud)

然而,所需的输出是 cat1 还包含一个前置破折号:

- cat1
- cat2
- cat3
- cat4
- cat5
Run Code Online (Sandbox Code Playgroud)

感谢您的阅读/帮助

bash sed

2
推荐指数
2
解决办法
117
查看次数

输出shell变量时如何保留空格?

为了进行字符串匹配,我需要使用前导空格定义bash变量。我需要从整数开始定义它,例如:

jj=5
Run Code Online (Sandbox Code Playgroud)

在我看来,printf是个好主意,因此,如果我想填充最多6个字符的空格:

jpat=`printf "  %6i"  $jj`
Run Code Online (Sandbox Code Playgroud)

但不幸的是,当我尝试调用该变量时:

echo $jpat
Run Code Online (Sandbox Code Playgroud)

前导空格被删除,我只得到$jj原样的整数。

有什么办法可以保留这样的空间?

(这等效于:v=' val'; echo $v$v。为什么输出中没有开头和多个空格?)

string bash whitespace substitution

1
推荐指数
1
解决办法
4815
查看次数

Bash 脚本 echo 似乎删除了我的新行?

这是我的文件 file.txt 的内容:

header
a
b
c
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么事。该命令不打印新行。

echo -e $(tail -n +2 file.txt)
Run Code Online (Sandbox Code Playgroud)

这打印:

a b c
Run Code Online (Sandbox Code Playgroud)

但是如果将其写入文件,您将清楚地看到新行:

tail -n +2 file.txt >> new_file.txt
Run Code Online (Sandbox Code Playgroud)

测试.txt

a
b
c
Run Code Online (Sandbox Code Playgroud)

如何强制 echo 打印新行?printf我认为如果不进行某种循环就无法在这里使用。

unix bash shell echo

1
推荐指数
1
解决办法
2850
查看次数

echo删除Bash变量中的前导空格

新手在这里打击.我希望在bash中为一个变量添加一个空格,目前我有以下内容,它似乎不起作用:

space=`printf '%1s' ' '`
mystr='hello'

mystr="$space$mystr"
echo $mystr
Run Code Online (Sandbox Code Playgroud)

因此,我不希望打印出"hello",而是希望结果是"hello",它在开头有一个额外的空格.这样做的正确方法是什么?谢谢.

bash shell quoting

1
推荐指数
1
解决办法
1489
查看次数