Bash 替换为sed;和空白

Bash 替换为sed;和空白,bash,ubuntu,sed,command,spaces,Bash,Ubuntu,Sed,Command,Spaces,我需要替换为sed命令行: ;[homes] ; browseable = no [homes] browseable = yes 在这方面: ;[homes] ; browseable = no [homes] browseable = yes sed-e的/^;*/',除非您的示例没有涵盖所有情况。您可以使用awk进行更改 awk '{sub(/^;[ ]*/,"")} /browseable/ {$3="yes"}1' [homes] browseable = yes

我需要替换为sed命令行:

;[homes]
;   browseable = no
[homes]
browseable = yes
在这方面:

;[homes]
;   browseable = no
[homes]
browseable = yes

sed-e的/^;*/',除非您的示例没有涵盖所有情况。

您可以使用
awk
进行更改

awk '{sub(/^;[ ]*/,"")} /browseable/ {$3="yes"}1'
[homes]
browseable = yes

Jonthan提供的数据

awk '/homes/ {sub(/^;[ ]*/,"");f=1} f && /browseable/ {sub(/^;[ ]*/,"");$3="yes";f=0}1' file
;[alerts]
;  browseable = no
[homes]
browseable = yes
;  alternatives = no
;[houses]
;  browseable = no
[mezzanine]
;  browseable = no
   alternatives = yes
或者像这样:

awk '/homes/ {$0="[homes]";f=1} f && /browseable/ {$0="browseable = yes";f=0}1' file

有很多方法可以修复所示的两条线。如果您认为这是INI文件格式,可能会有一些棘手的问题,可能会有其他部分包含<代码>可浏览的以及其他章节,而不是< >代码> [家庭] < /代码>。
sed -e '/^;\[homes]/,/^;*\[/{
        s/;\[homes]/[homes]/
        s/^; *browseable.*/browseable = yes/
        }'
给定输入文件:

;[alerts]
;  browseable = no
;[homes]
;  browseable = no
;  alternatives = no
;[houses]
;  browseable = no
[mezzanine]
;  browseable = no
   alternatives = yes
上述脚本的输出为:

;[alerts]
;  browseable = no
[homes]
browseable = yes
;  alternatives = no
;[houses]
;  browseable = no
[mezzanine]
;  browseable = no
   alternatives = yes
这也会起作用,

sed 's/^;//g;s/^ *\(.*\)/\1/g;s/no/yes/g' file

您错过了
更改。对。一定是因为问题的标题。我刚才回答了op的问题。否则乔纳森的回答是最好的。