使用sed替换不同行中的不同文本

时间:2017-11-01 20:48:57

标签: bash

我需要做以下事情:

我有两个文件,第一个只包含要修改的行:

1
2
3

,第二个包含将在原始文件中替换的文本(final_output.txt)

13e
19f
16a

原始文件是

wire1: 0x'd318   
wire2: 0x'd415   
wire3: 0x'd362 

我想得到以下内容:

wire1: 0x13e
wire2: 0x19f
wire3: 0x16a

这只是final_output.txt的一部分,因为该文件可以包含至少100行,我假装使用for来做,但我不知道如何实现它

2 个答案:

答案 0 :(得分:0)

awk救援!

假设单引号后的部分将被替换。

$ awk -v q="'" 'NR==FNR  {a[$1]=$2;next} 
                FNR in a {sub(q".*",a[FNR])}1' <(paste index rep) file

index是索引文件,rep是替换文件,file是原始数据文件。

答案 1 :(得分:0)

另一种解决方案,其中file1仅包含行,file2包含将在原始文件中替换的文本,而final_output.txt包含原始文本。

for

<强>输出

for ((i=1;i<=$(wc -l < file1);i++)); do sed -i "$(sed -n "${i}p" file1)s@$(sed -n "$(sed -n "${i}p" file1)p" final_output.txt | grep -oP "'.*")@$(sed -n "${i}p" file2)@g" final_output.txt; done