匹配选项卡与sed

时间:2014-10-10 00:21:02

标签: regex bash sed

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

    line one {
            line two {
                    filler {
                            text value
                    }
                    line four
            }
    }

我正在使用表达式,如果没有标签,则与上述文本匹配。

sed -i -e "/ line two {/,/}/s/text .*\$/text new/" $file

但是,在“第二行”之前有2个标签,在“填充”之前有3个标签,在“文本值”之前有4个标签。

任何帮助?

1 个答案:

答案 0 :(得分:3)

在GNU sed中,标签表示为\t。因此,将使用以下内容成功进行替换:

sed -i -e "/\tline two {/,/}/s/text .*\$/text new/" "$file"

唯一需要的更改是将/ line two {/替换为/\tline two {/。命令/s/text .*\$/text new/不需要任何更改,因为它不会尝试匹配text之前的空白区域。如果可能存在跟随 text的标签,请使用:

sed -i -e "/\tline two {/,/}/s/text[[:space:]].*\$/text new/" "$file"

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