小编Man*_*nde的帖子

在 Bash 中用逗号替换反斜杠

我尝试编写一个脚本,在其中逐行读取文件。我应该用逗号 (,) 替换反斜杠 (\)。

输入文件如下:

1,2,3,WORKSTATION1\A,5
1,2,3,WORKSTATION2\B,5
1,2,3,WORKSTATION1\C,5
1,2,3,WORKSTATION1\D,5
1,2,3,WORKSTATION1\E,5
1,2,3,WORKSTATION1\F,5
1,2,3,WORKSTATION1\G,5
Run Code Online (Sandbox Code Playgroud)

我写的这段代码如下:

#!/bin/bash

cat $1 | while read -r line
do
ln=$(echo $line | xargs | sed 's/\\/,/g' )
echo $ln
done

echo Done!
Run Code Online (Sandbox Code Playgroud)

当我运行时./script.sh file.csv,我得到以下输出:

1,2,3,WORKSTATION1A,5
1,2,3,WORKSTATION2B,5
1,2,3,WORKSTATION1C,5
1,2,3,WORKSTATION1D,5
1,2,3,WORKSTATION1E,5
1,2,3,WORKSTATION1F,5
1,2,3,WORKSTATION1G,5
Done!
Run Code Online (Sandbox Code Playgroud)

而我期望输出如下:

1,2,3,WORKSTATION1,A,5
1,2,3,WORKSTATION2,B,5
1,2,3,WORKSTATION1,C,5
1,2,3,WORKSTATION1,D,5
1,2,3,WORKSTATION1,E,5
1,2,3,WORKSTATION1,F,5
1,2,3,WORKSTATION1,G,5
Done!
Run Code Online (Sandbox Code Playgroud)

我也试过更换sed 's/\\/,/g'tr "\\" ",",但它没有帮助。需要什么修改吗?

sed text-processing bash-script

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

Bash 中 CSV 文件特定列的算术运算

我有一个文件,其内容如下:

A,10,20,30,40,50
B,20,40,10,30,60
C,30,50,20,40,10
D,40,50,20,10,30
Run Code Online (Sandbox Code Playgroud)

我希望对上述 CSV 文件的特定列(比如第 3 列)执行一些算术运算(比如除以 10)。所以,它写道:

A,10,2,30,40,50
B,20,4,10,30,60
C,30,5,20,40,10
D,40,5,20,10,30
Run Code Online (Sandbox Code Playgroud)

如何才能做到这一点?

bash bash-script

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

在 bash 脚本的 perl 命令中使用 bash 变量

我正在尝试/etc/shadow使用 bash 脚本生成文件中的散列密码。提示用户输入保存在变量中的密码PSWD。我已提取的散列,并从盐值/etc/shadow文件,并在一个变量保存了他们HVALSVAL分别。

现在为了使用 Password 和 Salt 值生成散列密码,我需要使用下面给出的命令(参考):

$ perl -e 'print crypt("password","\$6\$salt\$") . "\n"'

在上面的命令中,我必须用$PSWD变量替换“password”,用变量替换“6”,用变量替换$HVAL“salt” $SVAL

我试过导出上面的变量并在 perl 命令中替换它们,如下所示,但它完全搞砸了。

perl -e 'print crypt("$ENV{"PSWD"}","\$$ENV{"HVAL"}\$$ENV{"SVAL"}\$") . "\n"'

会有哪些修正?

bash perl shell-script quoting

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

错误:预期的整数表达式

我编写了一个脚本来确定服务器上的平均负载,如下所示:

#!/bin/bash

loadavg=`top -b -n1 | grep -i load | awk -F, '{print$4}'| awk -F: '{print $2}'`

if [ "${loadavg}" -le  1 ]
then
echo "OK - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 0;
elif [ "${loadavg}" -gt 1 ] && [ "${loadavg}" -le 2 ]
then
echo "WARNING - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 1;
elif [ "${loadavg}" -gt 2 ]
then
echo "CRITICAL - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 2;
else
echo "UNKNOWN …
Run Code Online (Sandbox Code Playgroud)

bash shell-script arithmetic floating-point

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

如果变量为空,如何打印连字符?

我正在收集wmic在 Linux 系统上使用的 Windows 系统信息。为此,我进行了各种wmic调用,它们的输出存储在一些变量中。收集到所需数据后echo,将这些变量(以冒号分隔)保存到文件中。

但是,当变量存储“空”值时会出现问题,因为它只显示两个连续的冒号,不显示任何内容。

printf每当变量中存储空值时,如何利用以显示“连字符”?

bash text-processing printf

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