我正在做一些文档工作,我有这样的树结构:
A
BB
C C
DD
如何使用'-'
替换线条头部中所有出现的2个空格,如:
A
--BB
--C C
----DD
我尝试了sed 's/ /-/g'
,但这会替换所有出现的2个空格;同样sed 's/^ /-/g'
,这只是替换了第一次出现的2个空格。我怎么能这样做?
答案 0 :(得分:6)
行开头的四个空格的正则表达式是/^ /
,其中我将斜杠用于划分表达式(它们不是实际正则表达式的一部分,但它们被{{1用作分隔符) }})。
sed
在最近的sed 's/^ /\t/' file
版本中,您可以添加sed
选项以就地修改-i
(即file
将使用修改后的文件替换文件) ;在* BSD(包括OSX)上,您需要sed
一个空选项参数。
标签的-i ''
转义码也不受普遍支持;如果这是一个问题,你的shell可能允许你通过在ctrl-V前面添加一个文字标签。
(您的问题标题显示"标签"但您的问题询问破折号。要替换为两个短划线,请将脚本的替换部分中的\t
替换为\t
,显然。)
如果你试图概括为"行开头的两个空格的任何组都应该用短划线替换#34;这在--
中是不可能做到的,但我建议改为Perl:
sed
这会将匹配捕获到perl -pe 's%^((?: )+)% "-" x (length($1) / 2)%e' file
;内部括号表达式匹配两个空格,$1
量词表示尽可能多次匹配。 +
标志允许我们在替换中使用Perl代码;这段代码重复了字符/e
,重复捕获的表达式的次数,方便地等于其长度的一半。