我是sed的新手,所以想知道如何匹配标签。我有一些这样的文字 -
line one {
line two {
filler {
text value
}
line four
}
}
我正在使用表达式,如果没有标签,则与上述文本匹配。
sed -i -e "/ line two {/,/}/s/text .*\$/text new/" $file
但是,在“第二行”之前有2个标签,在“填充”之前有3个标签,在“文本值”之前有4个标签。
任何帮助?
答案 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:]]
可用于匹配任何类型的空白区域。