首页 > 解决方案 > 使用 sed 查找和替换多行字符串

问题描述

我有一个包含以下数字的输入文件

-45.0005
-43.0022
-41.002
.
.
.

我有一个目标 txt 文件

line:12 Angle=30
line:42 Angle=60
line:72 Angle=90
.
.
.

使用 sed 我想用输入文件中的第一个条目替换目标文件中 Angle 条目的第一个实例,用输入文件的第二个条目替换 Angle 的第二个条目,依此类推......

预期输出:

line:12 Angle=-45.005
line:42 Angle=-43.002
line:72 Angle=-41.002
.
.
.

这是我设法写的,但我没有得到预期的输出


a=`head -1 temp.txt`
#echo $a
sed  -i "12s/Angle = .*/Angle = $a/g" $procfile
for i in {2..41..1}; do
        for j in {42..1212..30}; do
                c=$(( $i - 1 ))
                #echo "this is the value of c: $c"
                b=`head -$i temp.txt | tail -$c`
                #echo "This is the value of b: $b"
                sed  -i "$js/Angle = .*/Angle = $b/g" $procfile 2> /dev/null
        done
done

你能帮我改进剧本吗?

谢谢!

标签: bashsedgnu-sed

解决方案


您可以创建一个迭代器i,然后使用它sed在每一行中执行替换。

i=0; 
while read -r line; do 
   i=$((i+1)); 
   sed -i "${i}s/Angle=.*/Angle=${line}/g" $procfile; 
done < temp.txt

推荐阅读