在shell脚本中剪切并从另一个字符串中删除一个字符串

时间:2016-05-26 06:43:44

标签: linux bash shell unix

我在shell脚本中有一个以下字符串。

application

我需要从$ var中删除“default = default value”。 因此,最终的字符串将变为如下:

var="rule:access=allow,default=default value,OTHER=0,SOMETHING=1"

注意:默认值后的值可能是任何值。它可能是“默认=其他东西”。它不是固定的。我需要删除该文本。 如何才能做到这一点?

3 个答案:

答案 0 :(得分:2)

回答修订后的问题

$ echo "$var" | sed 's/default=[^,]*,//'
rule:access=allow,OTHER=0,SOMETHING=1

如果我们想要更新var的值,我们使用命令替换

$ var="$(echo "$var" | sed 's/default=[^,]*,//')"
$ echo "$var"
rule:access=allow,OTHER=0,SOMETHING=1

回答原始问题

使用bash

要删除default=default value,,请使用模式替换

$ var="${var/default=default value,/}"
$ echo "$var"
rule:access=allow,OTHER=0,SOMETHING=1

此功能记录在man bash

  

$ {parameter / pattern / string}
模式替换。模式是   扩展为生成模式,就像路径名扩展一样。   参数被扩展并且模式与其最长匹配   value被替换为string。如果模式以/开头,则所有匹配   用string替换模式。通常只有第一场比赛   被取代了。如果模式以#开头,则必须在开头匹配   参数的扩展值。如果模式以%开头,那么   必须在参数的扩展值的末尾匹配。如果   string为null,删除了pattern的匹配和/ following   模式可以省略。如果参数是@或*,则替换   操作依次应用于每个位置参数,并且   扩展是结果列表。如果参数是数组变量   订阅@或   *,替换操作依次应用于数组的每个成员,扩展是结果列表。

使用sed

$ var="$(echo "$var" | sed 's/default=default value,//')"
$ echo "$var" 
rule:access=allow,OTHER=0,SOMETHING=1

答案 1 :(得分:0)

再次将此内容分配给var

echo $var|sed 's/default=default value//'|sed 's/,,/,/'

上次sed来处理default=default value是字符串中第一个或最后一个关键字的情况。

答案 2 :(得分:0)

您可以使用两个参数扩展,一个用于获取default=*逗号之后的内容,另一个用于获取default之前的部分....

var="rule:access=allow,default=default value,OTHER=0,SOMETHING=1"

endo=${var#*default}
echo ${var/default=*}${endo#*,}

rule:access=allow,OTHER=0,SOMETHING=1

sed可能更容易......!