在 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 ...
如何从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)
除了解决方案,谁能告诉我为什么这样做?
谢谢你!
我想将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) 我想要这样的东西:
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)
我能做些什么?有任何想法吗?
谢谢,豪克
我在 shell 脚本中有一个变量,它在变量 $var1 中取一个值。如果我这样做,echo $var1我将获得例如价值波士顿。我想要的值是"Boston"
我尝试了几种情况:
var1=""$var1""
var1="""$var1"""
Run Code Online (Sandbox Code Playgroud)
但在这两种情况下,我都得到了结果,'$var1'但我想要"Boston"
解决方案请不要提及其中包含波士顿的解决方案。如果您只能var1在整个脚本中使用,我将不胜感激,这样可以更清楚!“Boston”只需要是脚本执行的输出和变量 var1 的初始化。
谢谢
我有以下 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) 我正在尝试将以空格分隔的类别字符串替换为新行上前面带有破折号的类别
我已经用破折号替换新行
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变量。我需要从整数开始定义它,例如:
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。为什么输出中没有开头和多个空格?)
这是我的文件 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我认为如果不进行某种循环就无法在这里使用。
新手在这里打击.我希望在bash中为一个变量添加一个空格,目前我有以下内容,它似乎不起作用:
space=`printf '%1s' ' '`
mystr='hello'
mystr="$space$mystr"
echo $mystr
Run Code Online (Sandbox Code Playgroud)
因此,我不希望打印出"hello",而是希望结果是"hello",它在开头有一个额外的空格.这样做的正确方法是什么?谢谢.