linux - 在 sed 命令中使用管道中的 STDIN 替换文件中的值
问题描述
我有一个命令来执行一系列生成可变输出字符串的命令,例如123456
. 我想将它传递给一个命令,该sed
命令替换 csv 文件中的已知字符串,如下所示:
Fred,Wilma,Betty,Barney
但是,下面的命令不起作用,我还没有找到任何其他使用管道值作为替换变量的参考。
如果 csv 中的值是随机顺序并且我总是想更改第二个值,那么此代码将如何更改?
示例代码:
find / -iname awk 2>/dev/null | sha256sum | cut -c1-10 > test.txt |
sed -i -e '/Wilma/ r test.txt' -e 's/Wilma//' input.csv
input.csv 的内容应该变成:Fred,0d522cd316,Betty,Barney
解决方案
好的,在
find / -iname awk 2>/dev/null | sha256sum | cut -c1-10 > test.txt | sed -i -e '/Wilma/ r test.txt' -e 's/Wilma//' input.csv
你有一个错误。剪切后的“> test.txt”会在sed上吃掉你的stdin,所以在使用stdin之后那个管道会变得很奇怪。您不希望那里有管道,或者您不想重定向到文件。
采用管道标准输入并将其用作命令中的参数的方法是通过xargs
.
find / -iname awk 2>/dev/null | sha256sum | cut -c1-10 | xargs --replace=INSERTED -- sed -i -e 's/Wilma/INSERTED/' input.csv
(......虽然 find|shasum 也是可疑的,因为文件的顺序是随机的(ish),并且对于可靠的总和很重要。您可能的意思是在 find 之后“|排序”。)
(有些会sed -i -e "s/Wilma/$(find|sort|shasum|cut)" f
,但我不在其中。动物。)
推荐阅读
- javascript - 如何在 vs 代码中为 Facebook Instant 游戏获取智能感知
- java - 使用 ReactiveMongoOperation 自定义序列
- django - 捕捉小数.ConversionSyntax django import export
- html - 如何选择一组相同元素中的最后一项
- html - 如何使用 boostrap 在 HTML 中制作菱形颜色/行
- mysql - 启动/停止服务器时 MySQL Workbench 冻结
- reactjs - MUI - 自动完成颜色样式损坏
- javascript - 检测手机方向变化的 JavaScript 函数
- vue.js - Vue,将数据添加到本地 data.json 文件(json-server)
- arrays - 在 C 中处理二维数组时出现意外行为(在其中获取随机数)