我有一个属性文件如下:
build.number=153013
db.create.tablespace=0
db.create.user=0
db.create.schema=0
upgrade.install=1
new.install=0
configure.jboss=0
configure.jbosseap=false
configure.weblogic=1
configure.websphere=0
我需要将这些变量导入shell脚本。如你所知, '。'不是在linux中用作变量的有效字符。我如何使用sed替换所有出现的'。'在'='之前加上'_'。我已经替换了所有出现的'。'但是有一些属性的值包含'。'我不想修改。
感谢任何帮助!
谢谢!
答案 0 :(得分:1)
您可以使用
sed -e ':b; s/^\([^=]*\)*\./\1_/; tb;'
只要匹配成功,它就会将stringWithoutEquals.
替换为stringWithoutEquals_
。实际上,这会替换.
之前的所有=
_
。
答案 1 :(得分:0)
你可以试试这个:
sed 's/\.\|\(=.*\)/_\1/g;s/_=/=/' file
该方法包括捕获等于消耗所有尾随字符(包括可能的点)之后的所有内容。所以在等于之前的所有点都用下划线和空捕获组替换,但在等于之前有一个下划线。第二次替换删除了最后一个下划线。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed 's/=/&\n/;h;y/./_/;G;s/\n.*\n//' file
使用=
处的标记分隔线条。复制该行。将所有.
替换为_
' s。附加原始行并在两个标记之间减去文本。
答案 3 :(得分:0)
这是awk
awk -F= '{gsub(/\./,"_",$1)}1' OFS== file
build_number=153013
db_create_tablespace=0
db_create_user=0
db_create_schema=0
upgrade_install=1
new_install=0
configure_jboss=0
configure_jbosseap=false
configure_weblogic=1
configure_websphere=0
它将文字除以=
,然后将第一个字段.
替换为_
。