对于令人困惑的标题感到抱歉,我无法说明我在没有示例的情况下尝试做的事情。
我运行了一串命令,产生的输出如下所示:
Host_A
Host_B
Net_X
Group_Y
等等等等
然后我想接受该输出并将其输入到sed中,以便它将使用新字符串(例如Host_Q)替换前一个列表中找到的字符串的任何实例。
sed 's/Host_A/Host_Q/g'
工作正常,但是我想避免为每个主机手动编写一个sed字符串。
谢谢!
编辑:更好的例子
grep stream产生:
Host_A
Host_B
Host_C
Host_D
+lots more
我想将该grep流传递给sed,并使用新的(尽管相同的)主机名替换所有这些主机的实例。
Editx2:此外,列表是动态的。因此,我针对新文件运行此类型,内容将不同,这就是为什么我不能(并且不想)硬编码原始值。
EDIT :::
我自己想通了,抱歉的家伙。
我是这样的:
awk '{print "sed \x27s\/"$1"/HOST_Q/g\x27"}'
很抱歉这么混乱
答案 0 :(得分:1)
您是否希望在同一个命令中添加多个替换字符串?
mycommands | sed '
s/Host_A/Host1/g
s/Host_B/Host2/g
s/Net_X/Net1/g
s/Group_Y/Group2/g'
或者创建如下命令文件:
#!/bin/sed -f
s/Host_A/Host1/g
s/Host_B/Host2/g
s/Net_X/Net1/g
s/Group_Y/Group2/g'
将此脚本保存为“chgnames”之类的文件并使其可执行,您可以使用简单的命令:
mycommands | ./chgnames
答案 1 :(得分:1)
sed 's#^\(Host_A\|Host_B\)$#Host_Q#'
这?