jsp*_*lbe 5 linux bash shell sed
我有一个命令来执行一系列命令,这些命令生成可变输出字符串,例如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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你有一个错误。剪切后的“> test.txt”将吃掉 sed 上的标准输入,因此在获取标准输入后该管道会变得很奇怪。您不希望那里有管道,或者您不希望重定向到文件。
获取管道标准输入并将其用作命令中的参数的方法是通过xargs.
find / -iname awk 2>/dev/null | sha256sum | cut -c1-10 | xargs --replace=INSERTED -- sed -i -e 's/Wilma/INSERTED/' input.csv
Run Code Online (Sandbox Code Playgroud)
(...尽管 find|shasum 也很可疑,因为文件的顺序是随机的,并且对于可靠的总和很重要。您可能是指在 find 之后“|排序”。)
(有些人会sed -i -e "s/Wilma/$(find|sort|shasum|cut)" f,但我不在其中。动物。)