我的文字文件包含以下内容:
param_1=7412
param_2=1234
我想要做的是将param_1值设置为param_2并将新值设置为param_1。所以看起来应该是这样的:
param_1=9999
param_2=7412
更改值后,我必须将内容保存回文件。
也许我可以使用" sed"命令实现这个?还有更多想法吗?
答案 0 :(得分:2)
为了更灵活地使用您可以使用的参数值,可以使用source
命令或.
运算符
让我们假设该文件包含以下行
param_1=7412
param_2=1234
然后我们可以使用
导入此变量#!/bin/bash
source <filename>
echo $param_1
echo $param_2
param_1=9999
param_2=7412
#check that new values are assigned to variables
echo $param_1
echo $param_2
然后使用echo
命令将新值放入文本文件中。请注意,您应该先处理被删除的文件,或者您需要选择是否要添加或覆盖该文件:
destdir=/some/directory/path/filename
if [ -f "$destdir"]
then
echo "param_1=$param_1" > "$destdir"
fi
if
代表文件的$destdir
次测试。
注意:
>
替换文件中的文本。
如果您只想将$param_1
中的文字附加到文件现有内容中,请改用>>
:
echo "param_2=$param_2" >> "$destdir"
希望这有帮助。
参考文献:
https://askubuntu.com/questions/367136/how-do-i-read-a-variable-from-a-file
答案 1 :(得分:2)
如果您不知道以前的值,那么您可以像
这样的配置方式修改文件 #!/bin/bash
sed -i "s/\(param_1 *= *\).*/\19999/" file
sed -i "s/\(param_2 *= *\).*/\17412/" file
答案 2 :(得分:1)
共:
您可以使用sed
命令执行此操作:
sed -i 's|param_1=7412|param_1=9999|' file.txt
sed -i 's|param_2=1234|param_2=7412|' file.txt
但是在更详细的回答中,我为你写了一个bash:
#!/bin/bash
VAL_1=`echo $RANDOM | cut -c1-4` #VAL_1=`shuf -i 0000-9999 -n 1`
VAL_2=`awk -F= '{print $2}' file.txt | head -1`
sed -i.bak "1s/.*/\param_1=${VAL_1}/g" file.txt
sed -i.bak "2s/.*/\param_2=${VAL_2}/g" file.txt
答案 3 :(得分:0)
我不太清楚实际的目标是什么。但我解释的目标是弹出最后一个条目并将所有其他条目移开。
就我个人而言,我认为有更好的工具可以进行这种处理(例如python),但我尝试用纯粹的bash来解决这个难题。
这是脚本的作用:
$ cat input.txt
param1=1000
param2=2000
param3=3000
param4=4000
$ ./script input.txt 10000
$ cat input.txt
param1=10000
param2=1000
param3=2000
param4=3000
这是脚本,请参阅注释以获取详细信息:
#!/usr/bin/env bash
# Take an input file as the first argument
data="$1"
# Take the new value as the second argument
new_value=$2
# Read each line of the input file into an array
# note that readarray is a bash 4 builtin command
readarray -t entries < "$data"
# Get the length of the array
len_entries=${#entries[@]}
# Remove the last entry of the array since we don't need it anymore
unset entries[len_entries-1]
# Set up a counter needed for indexing and creating the new string inside the loop
counter=2
# Process each entry of the array
for entry in "${entries[@]}"; do
# Get the value of the param?=*
entry="${entry#*=}"
# Enumerate the new string
entry="param${counter}=${entry}"
# Write the new string to its new position inside the array
entries[counter-1]="$entry"
# Raise the counter
(( counter++ ))
done
# Add the new user defined value to the first index of the array
entries[0]="param1=${new_value}"
# Write the contents of the array to the file
printf "%s\n" "${entries[@]}" > "$data"