抨击循环 sed 心灵问题



我想对多个 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

相关内容

  • 没有找到相关文章

最新更新