使用 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 可供使用,并试图通过 sed
、awk
等实现它,但现在是星期五下午,我不在。
有什么建议吗?我得到的最接近的是:
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个替换,考虑任何值
我有一个文件,其中有些行是这样的:
ENV FOO bar
ENV BAZ boz
ENV BIP bop
我只想将这些行转换为:
export FOO=bar
export BAX=boz
export BIP=bop
我有 bash 可供使用,并试图通过 sed
、awk
等实现它,但现在是星期五下午,我不在。
有什么建议吗?我得到的最接近的是:
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个替换,考虑任何值