Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-replace&;写在同一行_Bash_Echo - Fatal编程技术网

Bash-replace&;写在同一行

Bash-replace&;写在同一行,bash,echo,Bash,Echo,我有一个bash脚本,可以从许多服务器获取详细信息。它工作得很好,但我希望这些行得到更新,而不是得到新的书面 while [ true ] ; do for i in $(seq ${#details[@]}); do .... more code (irrelevant) echo ${server[$i]} echo $stat1 echo $stat2 echo $stat3 echo $stat4 done done 我该怎么做,所有行都会不断更新到同

我有一个bash脚本,可以从许多服务器获取详细信息。它工作得很好,但我希望这些行得到更新,而不是得到新的书面

while [ true ] ; do
for i in $(seq ${#details[@]}); do
    .... more code (irrelevant)

echo   ${server[$i]}
echo   $stat1
echo   $stat2
echo   $stat3
echo   $stat4


done
done
我该怎么做,所有行都会不断更新到同一行? 我尝试使用echo-ne,但这使得所有内容都排在一条长线上

我希望该行保留该位置,并使用新值进行更新

如果有人知道一个诀窍那就太好了

谢谢大家!

更新1

@布克利:


谢谢你的回答,但它不能正常工作。用这种方法,我已经试过了。结果是(它总是创建新行):

应该是

10.0.0.1
17
1003
10.0.0.2
319
727
10.0.0.3
157
3683

IP下的值应不断更新。(我认为这应该可以正常使用-ne,但在我的情况下它不能)。

您可能希望尝试使用
sed
-i
选项“就地”编辑文件(即更改现有文件而不是编写新文件)

您可能希望尝试使用
sed
-i
选项“就地”编辑文件(即更改现有文件而不是编写新文件)

如果您已经跨多行输出,则在不清除屏幕的情况下无法删除这些行。您有两个选择:

使用
watch
您可以编写一个脚本,输出一次统计数据,然后使用
watch
重复该脚本:

watch -n 10 ./script.sh # calls script every 10 seconds.
清除屏幕 如果这不合适,您需要自己清除屏幕:

while [ true ] ; do
    clear # clear the screen

    for i in $(seq ${#details[@]}); do
        # ...
    done

    sleep 10 # don't update the screen too often
done

然而,在这一点上,您几乎已经实现了一个基本版本的
watch

如果您已经跨多行输出,您不能在不清除屏幕的情况下删除这些行。您有两个选择:

使用
watch
您可以编写一个脚本,输出一次统计数据,然后使用
watch
重复该脚本:

watch -n 10 ./script.sh # calls script every 10 seconds.
清除屏幕 如果这不合适,您需要自己清除屏幕:

while [ true ] ; do
    clear # clear the screen

    for i in $(seq ${#details[@]}); do
        # ...
    done

    sleep 10 # don't update the screen too often
done

然而,在这一点上,您已经实现了一个基本版本的
watch

请显示您的预期输出-在不知道变量内容和示例结果的情况下,很难说出您想要什么。不清楚您调用的是哪一行。你有一个文件,你想更新到位吗?请看我的“应该是”的例子在我的第一篇文章-这是它应该是什么样的。IP下的值应不断更新。目前,更新后的数据将写入新行。旧值应替换为新值。@chepner否,输出在shell中。没有文件。请显示您的预期输出-在不知道变量内容和示例结果的情况下,很难说出您想要什么。不清楚您调用的是哪一行。你有一个文件,你想更新到位吗?请看我的“应该是”的例子在我的第一篇文章-这是它应该是什么样的。IP下的值应不断更新。目前,更新后的数据将写入新行。旧值应替换为新值。@chepner否,输出在shell中。没有文件。谢谢你的回答,但它不能正常工作。用这种方法,我已经试过了。结果是:
10.0.0.2 100310.0.0.1 72710.0.0.3 368310.0.0.2 100310.0.0.1 72710.0.0.3
应该是
10.0.0.1 17 1003 10.0.0.2 319 727 10.0.0.0.3 157 3683
IP下的值应该不断更新。(我认为这应该与-ne正常工作,但在我的情况下它不会)。编辑:评论不保持格式。我把它添加到我的第一篇文章中。谢谢。我已经用clear完成了,但这不是我的选择。那么Bash不能直接更新一行吗?我将尝试将输出写入一个文件,使用sed-I(如mti2935 sayed)编辑文件中的新值,并对文件进行cat以进行输出。我认为这应该很有效,你有这方面的经验吗?这行吗?谢谢你快速的回答!!我又查了一遍手表,它正是我要找的。非常感谢!如果你能回答我关于sed-i的问题,那就太好了。
sed-i
只对磁盘上存在的文件进行就地编辑有用。它在这里真的没有任何用处。如上所述,完成后无法修改输出到屏幕的内容,除非先清除屏幕。谢谢您的回答,但它无法正常工作。用这种方法,我已经试过了。结果是:
10.0.0.2 100310.0.0.1 72710.0.0.3 368310.0.0.2 100310.0.0.1 72710.0.0.3
应该是
10.0.0.1 17 1003 10.0.0.2 319 727 10.0.0.0.3 157 3683
IP下的值应该不断更新。(我认为这应该与-ne正常工作,但在我的情况下它不会)。编辑:评论不保持格式。我把它添加到我的第一篇文章中。谢谢。我已经用clear完成了,但这不是我的选择。那么Bash不能直接更新一行吗?我将尝试将输出写入一个文件,使用sed-I(如mti2935 sayed)编辑文件中的新值,并对文件进行cat以进行输出。我认为这应该很有效,你有这方面的经验吗?这行吗?谢谢你快速的回答!!我又查了一遍手表,它正是我要找的。非常感谢!如果你能回答我关于sed-i的问题,那就太好了。
sed-i
只对磁盘上存在的文件进行就地编辑有用。它在这里真的没有任何用处。如上所述,在完成后不能修改输出到屏幕的内容,除非先清除屏幕。