使用 sed 进行分组和替换

Grouping and substitution with sed

我有一个文件,其中有些行是这样的:

ENV FOO bar
ENV BAZ boz
ENV BIP bop

我只想将这些行转换为:

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

我有 bash 可供使用,并试图通过 sedawk 等实现它,但现在是星期五下午,我不在。

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

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

谢谢。

使用 awk:

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

解释:

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

使用 sed:

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

两个范围都需要一个中继器 (*),后一个范围需要小写字母。就像@EmilKakkau 提到的那样,您需要 -r 选项并且不需要括号中的转义符。

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

2个替换,考虑任何值