我想对多个 ifcg 文件做一个 sed,但"eth$i"不递增,每个文件中都有 eth0。 我的目标是在 eno1 eth0 中拥有,在 enps0 eth1 中...
非常感谢,如果有人可以帮忙
ls test
eno1 enps0 enps1 enps2 enps3 lo
cat test/eno1
name=eno1
device=eno1
for NAME in $(ls test/ | grep -v lo | sort)
do
for (( i=0; i<$(ls test/ | grep -v lo | wc -l); i++ ))
do
sed -i "s/${NAME}/eth${i}/g" test/$NAME
done
done
在决赛中,我想拥有
cat test/eno1
name=eth0
device=eth0
cat test/enps0
name=eth1
device=eth1
cat test/enps1
name=eth2
device=eth2
。
谢谢
请您尝试以下方法:
i=0 # initialize the variable i
for f in test/*; do # loop over the files in the directory test/
# note that you don't need to "sort" here
name=${f##*/} # extract the basename of the file
if [[ -f $f && $name != "lo" ]]; then # if "$f" is a regular file and not "lo"
sed -i "s/$name/eth${i}/" "$f" # substitute the device name
(( i++ )) # increment the value of i
fi
done
将文件存储在数组中时,可以使用接口的数组索引。
cd test
files=( e* )
for ((i=0; i<${#files[@]}; i++)); do
printf "name=eth%sndevice=eth%sn" $i $i > "${files[i]}"
done