【发布时间】:2015-11-20 01:53:34
【问题描述】:
我的 sed 脚本无法正常工作。 我想做的是找出匹配的单词并替换。 但是在替换时,请参考 intf.txt 并以每一行依次替换找到的每个项目。
例如,我想将“5/0/0”和“5/1/0”替换为“6/3/0”和“7/1/3”。
这是原始输入。 $ 更多 test.xml | grep --line-number 物理接口
199: <physical_interface>5/0/0</physical_interface>
256: <physical_interface>5/1/0</physical_interface>
这是我写的shell。 $ 更多 replace-intf.sh
#!/bin/bash
while read line;
do
sed -e "s|[0-9]\/[0-9]\/[0-9]|$line|" ~/test.xml
done <intf.txt`
它将“intf.txt”作为输入变量。
$ 更多 intf.txt
6/3/0
7/1/3
我将 sed 组合到 while 循环中。 所以,我希望它会用 intf.txt 中的内容逐行替换。
这里是执行和输出脚本。 $ more exec.sh
#!/bin/bash
./replace-intf.sh | sed -e '414,$d' > test1.xml
more test1.xml | grep --line-number physical_interface
这是结果。
$./exec.sh
199: <physical_interface>6/3/0</physical_interface>
256: <physical_interface>6/3/0</physical_interface>
现在,我的脚本只占用 intf.txt 的第一行。它永远不会引用第二行,即 7/1/3 并且不会替换 5/1/0。
有人知道我的脚本有什么问题吗?
任何cmets都非常感谢。
【问题讨论】:
-
replace-interface.sh和replace-intf.sh是什么关系? -
你的代码中有很多奇怪的误解和非常规的结构。如果你能减少它的特殊性,那么需要整理的切线垃圾就会减少。您认为您可以将您的问题简化为您的一个假设,这似乎与您实际看到的相矛盾吗?