我在shell脚本中有一个以下字符串。
application
我需要从$ var中删除“default = default value”。 因此,最终的字符串将变为如下:
var="rule:access=allow,default=default value,OTHER=0,SOMETHING=1"
注意:默认值后的值可能是任何值。它可能是“默认=其他东西”。它不是固定的。我需要删除该文本。 如何才能做到这一点?
答案 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
要删除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 模式可以省略。如果参数是@或*,则替换 操作依次应用于每个位置参数,并且 扩展是结果列表。如果参数是数组变量 订阅@或 *,替换操作依次应用于数组的每个成员,扩展是结果列表。
$ 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
可能更容易......!