替换n#39;。'的所有出现次数。与''之前' ='使用sed

时间:2014-11-12 01:37:02

标签: regex linux bash unix sed

我有一个属性文件如下:

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替换所有出现的'。'在'='之前加上'_'。我已经替换了所有出现的'。'但是有一些属性的值包含'。'我不想修改。

感谢任何帮助!

谢谢!

4 个答案:

答案 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

它将文字除以=,然后将第一个字段.替换为_