bash - 使用 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
你能帮我改进剧本吗?
谢谢!
解决方案
您可以创建一个迭代器i
,然后使用它sed
在每一行中执行替换。
i=0;
while read -r line; do
i=$((i+1));
sed -i "${i}s/Angle=.*/Angle=${line}/g" $procfile;
done < temp.txt
推荐阅读
- android - android 中是否有标准/推荐的方式(或库)我应该使用 Kotlin 执行 GET、PUT、POST 和 DELETE 请求?
- itext7 - 使用 iText 合并目录中的所有 Pdf 文件
- ios - Xamarin 表单检测屏幕是否处于活动状态和/或设备锁定
- python - UDF 中的 Pyspark 和局部变量
- c# - C#成员变量和传递给方法的参数之间的区别
- c++ - c++ 使用 getline() 读取文件并正确格式化输出的问题
- python - 代码返回错误?(Python)itemconfigure 没有定义?
- android - FLAG_LAYOUT_NO_LIMITS 用于自定义状态栏使导航栏重叠
- azure-iot-edge - IoT Edge:设备无法从 Azure Container Registry 下载我的模块,但可以从 dockerhub
- javascript - 如何在 Bootstrap Popover 中启用 Bootstrap 4 Carousel