我有一个文件,其中有些行如下:
ENV FOO bar
ENV BAZ boz
ENV BIP bop
我想将这些行转换为:
export FOO=bar
export BAX=boz
export BIP=bop
我可以随意使用bash,并试图通过sed
,awk
等来实现它,但是星期五下午我并不是全部。< / p>
有什么建议吗?我最近得到的是:
sed -i 's/^ENV\s\([A-Z]\)\s*\([A-Z]\)/export \1 = \2/g' -i file
感谢。
答案 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替换,考虑任何价值