0

sed除了试图解决这个问题的几个小时之外,我从来没有使用过。我有一个配置文件,其参数如下:

test.us.param=value
test.eu.param=value
prod.us.param=value
prod.eu.param=value

REGIONID如果是美国,我需要解析这些并输出:

test.param=value
prod.param=value

关于如何做到这一点的任何帮助(有sed或没有)都会很棒。

4

2 回答 2

3

这对我有用:

sed -n 's/\.us\././p'

即如果“.us”。可以用点代替,打印结果。

于 2013-04-29T14:42:12.317 回答
0

如果有成百上千的行,首先搜索包含 .us 的行可能更有效。然后进行字符串替换... AWK 是另一个不错的选择或管道 grep 到 sed

cat INPUT_FILE | grep "\.us\." | sed 's/\.us\./\./g'

当然,如果'.us.' 可以在值这不够。

您也可以使用地址语法(从技术上讲,您可以将第二个 sed 嵌入到第一个语句中,只是不记得语法)

sed -n '/\(prod\|test\).us.[^=]*=/p' FILE | sed 's/\.us\./\./g'

我们可能应该做一些更清洁的事情。如果格式始终是 environment.region.param,我们可以考虑强制它只出现在等号之前的文本上。

sed -n 's/^\([^,]*\)\.us\.\([^=]\)=/\1.\2=/g'

这仅适用于以任意数量的字符开头后跟“。”的行。然后是“我们”,然后是“。” 然后是'='符号之前的任何数字。这样我们就不会潜在地修改“.us”。如果在“值”中找到

于 2013-04-29T16:10:46.690 回答