无法在file1中搜索并在file2中使用sed和xargs替换所有行。

问题描述 投票:0回答:1

我需要搜索file1中的每一个字符串,然后在file2中用一个字符串来替换这个字符串。

xargs -l1 -- sh -c '...

node1
node2

Why use a convoluted

node1
node2
node3
node4
cat ~/backup/file1.log | xargs -l1 -- sh -c 'sed -i "s/$1/done/g" ~/backup/file2.log' -- > ~/backup/file3.log

file2

done
done
node3
node4

预期输出文件3

prints nothing in file3
实际产量
bash awk sed xargs
1个回答
1
投票

团队,我需要搜索file1中的每个字符串,然后在file2中用一个字符串替换file1 node1 node2 file2 node1 node2 node3 node4 cat ~backupfile1.log。sed 循环,而你可以在 xargs? 最糟糕的是,你的命令对第一个文件中的每一个新条目都进行新的文件IO。awk你的

awk 'FNR == NR { lines[$1]; next } $1 in lines { $0 = "done" }1' f1 f2 > f3

命令的作用是将第一个文件中的所有行标记为 awk 数组,然后在查找第二个文件 lines 将匹配第二个文件中那些行内容在 $1 in lines 数组。如果是这样,请将当前行修改为 lines 并打印出来 "done" 或默认打印非匹配行的行。{..}1

可改为 $1 in line 只要你是按 "整行 "匹配两个文件中的内容就可以了。对于具体的列位匹配要拼出实际的列位。$0 in line

© www.soinside.com 2019 - 2024. All rights reserved.