用sed分组和替换

时间:2015-02-13 14:19:47

标签: bash awk sed

我有一个文件,其中有些行如下:

ENV FOO bar
ENV BAZ boz
ENV BIP bop

我想将这些行转换为:

export FOO=bar
export BAX=boz
export BIP=bop

我可以随意使用bash,并试图通过sedawk等来实现它,但是星期五下午我并不是全部。< / p>

有什么建议吗?我最近得到的是:

sed -i 's/^ENV\s\([A-Z]\)\s*\([A-Z]\)/export \1 = \2/g' -i file

感谢。

3 个答案:

答案 0 :(得分:3)

使用awk:

awk '$1=="ENV"{printf "export %s=%s%s", $2, $3, ORS}' file
export FOO=bar
export BAZ=boz
export BIP=bop

<强>解释

$1=="ENV"                             # Do it only when first field is ENV
printf "export %s=%s%s", $2, $3, ORS  # print formatted output by inserting =
                                      # between field 2 and field 3

使用sed:

sed '/^ENV /s/^ENV/export/;s/ \+\([^ ]\+$\)/=\1/' file
export FOO=bar
export BAZ=boz
export BIP=bop

答案 1 :(得分:3)

在后一个范围内,您需要两个范围和小写的转发器(*)。和@EmilKakkau一样,你需要-r选项,并且不需要括号上的转义符。

sed -r 's/^ENV\s([A-Z]*)\s*([a-z]*)/export \1 = \2/g' -i file

答案 2 :(得分:1)

sed 's/ENV/export/;s/\s+/=/2' -i file

2替换,考虑任何价值