如何解决如何使用 UNIX 工具 (sed/awk/etc) 仅替换此临时文件格式中特定文件的给定密钥? 文件 1:文件 2:输出首先使用 awk 的解决方案现在与 sed 相同
我想用文件 2 中找到的值替换文件 1 中的 location
值。例如,对于给定的示例,location
值应从 24 更改为 32,从 25 更改为 34 .
文件 1:
'location': '24'
'Size':'8'
'location':'25'
'Size':2'
文件 2:
32
34
输出
'location': '32'
'Size':'8'
'location':'34'
'Size':'2'
解决方法
首先使用 awk
的解决方案
awk -F"'" -v OFS="'" '
$2 == "location" { getline $4 < "file2" }
1
' file1
说明:每一行都用分隔符 '
分割,并且在每一“位置”行上,我们将值(字段 $4
)替换为从文件 2 中读取的值(getline
)。如果 file2 没有足够的值,则该行保持不变。
现在与 sed
相同
sed "s/.*/'location':'&'/" file2 \
| sed -e "
/^'location'/ ! b
R /dev/stdin
d
" file1
说明:GNU sed
有一个 R
command,其工作方式类似于 getline
中的 awk
命令。我们首先转换 file2 使其行看起来像 file1(第一个 sed
),然后我们将结果通过管道传输到另一个 sed
命令。每次后者看到“位置”行时,它都会将其替换为从 stdin
读取的行。这次,如果 file2 没有足够的值,则删除该行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。