我正在尝试将文件中第 (j+1) 次出现的“Nb”替换为 Nbu,如下所示:
Nb Nbc blahblahblah
Nb blablablaNbblabla
Cd Nb
and many lines that follow
其中 j 是 for 循环中的变量。
我想要得到的是这样的东西。例如,当j=1时:
Nb Nbc blahblahblah
Nbu blablablaNbblabla
Cd Nb
and many lines that follow
我现在的代码如下所示:
for j in $(seq 1 1 4)
do
sed -i ':a;N;$!ba;s/Nb /Nbu/$((j+1))' file
done
但是,我收到一条错误消息:
sed: -e expression #1, char 21: unknown option to `s'
问题似乎来自 $((j+1)) 因为当我将代码更改为
sed -i ':a;N;$!ba;s/Nb /Nbu/2' file
我得到了 j=1 所需的输出。
包含循环 j 的语法应该是什么?
最佳答案
sed 脚本周围的单引号防止变量扩展。您期待一个数字,但 sed 看到一个“$”。不是 s 的有效标志
分解引用的部分以允许变量扩展
sed -i ':a;N;$!ba;s/Nb /Nbu/'$((j+1)) file
关于bash - 使用 sed 将文件中 for 循环中第 n 次出现的字符串替换为另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56035791/