我有一个文本文件,里面有这个示例值:

 1:0:0:Monitoring stuff with Zabbix/OCS:24 HOURS

所以我想用一个变量改变第二个字段。我想这样做:
#!/bin/bash

PRIOR="Priority = 1 - Must have | 2 - Nice to have | 3 - Interesting | 0 - Not interesting"

while read -r line;
do
echo $line
echo $PRIOR
echo -n "Set your priority: "
read SETP</dev/tty
echo "Priority defined: "$SETP
<change my 2nd column value with $SETP>
done < courses.txt

最佳答案

有一个办法

newline=$( echo "$line" | sed "s/:[^:]\+/:$SETP/")

这将用冒号和用户的输入替换第一个冒号后跟非冒号字符。
一些代码评审说明:
养成使用良好缩进的习惯——你未来的自我将感谢你编写了可读和可维护的代码
不要使用所有的大写变量名,把它们留给shell——总有一天你会写read PATH然后想知道为什么你的脚本被破坏了。
priorities="..."read setp
quote your variables——除非你知道什么时候不引用它们,否则总是这样做。
echo "$line"
echo "Priority defined: $setp"--引号内的变量
验证用户的输入:
if [[ $setp == *[^0-9]* ]]; then echo "digits only! try again"; fi
在bash中,您可以编写read -p "Set your priority: " setp < /dev/tty--不需要单独的echo语句
了解语言支持的数据结构非常重要——学习如何使用bash数组。

10-06 06:02