Bash 重写sed命令以编辑流而不是文件

Bash 重写sed命令以编辑流而不是文件,bash,shell,sed,Bash,Shell,Sed,在正常情况下,sed可以通过管道从另一个命令编辑流: ./somecommand | sed 's/xx/yy/g' 但是,我使用的sed命令有点复杂。在此之前,我获得了针对特定用例优化sed的帮助: 最终的结果是,对于我的用例,以下sed命令是最理想的: ./somecommand > file sed -e 's/^/s|/; s/$/|g/;' replacement_list | sed -r -f - -i file 基本上,第一个sed命令从具有成对子状态的文件创建一个s

在正常情况下,
sed
可以通过管道从另一个命令编辑流:

./somecommand | sed 's/xx/yy/g'
但是,我使用的
sed
命令有点复杂。在此之前,我获得了针对特定用例优化
sed
的帮助:

最终的结果是,对于我的用例,以下
sed
命令是最理想的:

./somecommand > file
sed -e 's/^/s|/; s/$/|g/;' replacement_list | sed -r -f - -i file
基本上,第一个
sed
命令从具有成对子状态的文件创建一个sed操作列表。然后,第二个
sed
命令通过管道使用流,并使用
-f
选项处理文件

此后情况有了一些变化,现在我设法让
somecommand
stdout
中输出结果,而不是写入文件,但我想不出正确重写上述命令集的方法。部分困难在于第二个
sed
命令已经在使用来自第一个
sed
命令的流


我尝试过的一件事是将
somecommand
stdout
分配给一个变量,并尝试
您可以通过使用shell的内联扩展来解决这个问题(我想这就是它的名称,如果我错了,请纠正我)

请注意双引号内的反勾号,这将导致内部
sed
命令的标准输出置于双引号内

尽管如此,这是危险的,因此您可能希望尝试先将内部
sed
命令的输出保存到shell变量,如下所示

sedcommand="`sed -e 's/^/s|/; s/$/|g/;' replacement_list`"
./somecommand | sed -r -e "$sedcommand"

/somecommand | sed-r-e“$(sed-e的/^/s |/$/| g/|替换列表)
不再需要在双引号内转义,也不需要使用双引号而不是简单的或任何多次出现的操作系统反斜杠,如
s/\\\\\\\\\\\\\\\\\\\\/g
sedcommand="`sed -e 's/^/s|/; s/$/|g/;' replacement_list`"
./somecommand | sed -r -e "$sedcommand"