Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在sed命令中使用stdinfrompipe替换文件中的值_Linux_Bash_Shell_Sed - Fatal编程技术网

Linux 在sed命令中使用stdinfrompipe替换文件中的值

Linux 在sed命令中使用stdinfrompipe替换文件中的值,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我有一个命令来执行一系列生成变量输出字符串的命令,比如123456。我想通过管道将其传输到sed命令,替换csv文件中的已知字符串,如下所示: 弗雷德、威尔玛、贝蒂、巴尼 但是,下面的命令不起作用,我还没有找到任何其他使用管道值作为替换变量的引用 如果csv中的值是以随机顺序排列的,并且我总是想更改第二个值,那么该代码将如何更改 示例代码: find / -iname awk 2>/dev/null | sha256sum | cut -c1-10 > test.txt | sed

我有一个命令来执行一系列生成变量输出字符串的命令,比如
123456
。我想通过管道将其传输到
sed
命令,替换csv文件中的已知字符串,如下所示:
弗雷德、威尔玛、贝蒂、巴尼

但是,下面的命令不起作用,我还没有找到任何其他使用管道值作为替换变量的引用

如果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并将其用作命令中的参数的方法是通过
xargs

find/-iname awk 2>/dev/null | sha256sum | cut-c1-10 | xargs--replace=INSERTED--sed-i-e's/Wilma/INSERTED/'input.csv
(…虽然这个发现| shasum也是可疑的,因为文件的顺序是随机的(ish),而且它对可靠的总和很重要。你可能意味着在发现之后进行“|排序”。)

(有些人会
sed-i-e“s/Wilma/$(find | sort | shasum | cut)”f
,但我不在其中。动物。)

  • 要替换像“Wilma”这样的固定字符串,请尝试:

  • 要替换第二个字段(无论其中包含什么),请尝试:

    sed -i 's/[^,]*/'"$(find / -iname awk 2>/dev/null | 
                        sha256sum | cut -c1-10)"'/2' input.csv
    

  • 你能给出一个input.csv的示例行吗?你的管道和重定向有点混淆了。查看input.csv和期望的输出可能会更好地理解您正在尝试做什么和尝试实现什么。我认为您可能会虐待猫
    sed-i-e's/Wilma/“$(cat)”/“input.csv
    find/-iname awk 2>/dev/null | sha256sum | cut-c1-10
    的输出是什么?CSV文件总是只有一行吗?动物风格,耶!
    sed -i 's/[^,]*/'"$(find / -iname awk 2>/dev/null | 
                        sha256sum | cut -c1-10)"'/2' input.csv