与 sed 匹配的选项卡

use*_*517 2 regex bash sed

我是 sed 的新手,所以想知道如何匹配选项卡。我有一些这样的文字 -

    line one {
            line two {
                    filler {
                            text value
                    }
                    line four
            }
    }
Run Code Online (Sandbox Code Playgroud)

我正在使用表达式,如果没有选项卡,则匹配上述文本。

sed -i -e "/ line two {/,/}/s/text .*\$/text new/" $file
Run Code Online (Sandbox Code Playgroud)

但是,“第二行”之前有 2 个选项卡,“填充”之前有 3 个选项卡,“文本值”之前有 4 个选项卡。

有什么帮助吗?

Joh*_*024 5

在 GNU 中sed,制表符表示为\t. 因此,将通过以下方式成功进行替换:

sed -i -e "/\tline two {/,/}/s/text .*\$/text new/" "$file"
Run Code Online (Sandbox Code Playgroud)

唯一需要的更改是替换/ line two {//\tline two {/. 该命令/s/text .*\$/text new/不需要任何更改,因为它不会尝试匹配text. 如果有可能是一个选项卡下面 text,然后使用:

sed -i -e "/\tline two {/,/}/s/text[[:space:]].*\$/text new/" "$file"
Run Code Online (Sandbox Code Playgroud)

如果您不确定将出现什么空格字符,则该表达式[[:space:]]可用于匹配任何类型的空格。