如何对多次找到的模式使用不同的替换文本

如何对多次找到的模式使用不同的替换文本

示例日志文件:

apple AAA rose
banana AAA tulip
orange AAA marigold

替换文本文件:

111
222
333

预期输出:

apple 111 rose
banana 222 tulip
orange 333 marigold

答案1

给猫剥皮的方法有很多种。让我们假设两个文件之间的连接位于第 No 行。尝试例如这个,它将paste行放在一起,然后将尾随单词移动到包含AAA使用正则表达式“反向引用”的字段:

paste sample_log replacement-text | sed -r 's/AAA ([^[:space:]]*[[:space:]]*)(.*$)/\2 \1/'
apple 111 rose  
banana 222 tulip    
orange 333 marigold 

或者这个,它将awk替换读入数组,然后用相应的数组元素替换第二个字段:

awk 'NR==FNR {T[NR] = $0; next } {$2 = T[FNR]} 1' replacement-text sample_log 
apple 111 rose
banana 222 tulip
orange 333 marigold

答案2

#!/bin/bash 
paste logfile.txt replacement.txt | while IFS= read -r line; do

echo $line | sed "s/`echo $line | awk '{print $2}'`/`echo $line | awk '{print $4}'`/g" | awk '{print $1 " " $2 " " $3 " "}'

done

相关内容