如何将前导空格与sed
(全部)匹配?我不是在谈论前导制表符,而只是在谈论前导空格。
从我在 Nano 中所做的一个小测试来看,这似乎是正确的:
sed "s/^ //g"
你发现这个方法有什么问题吗?
注意:“全部”是指文档中的所有前导空格,如果有 2 个或更多(而不仅仅是 1 个)。
答案1
删除前导空格:sed "s/^ *//"
删除前导空格:sed "s/^[[:space:]]*//"
删除前导空格和制表符:(sed "s/^[ \t]*//"
在 GNU sed 中工作)或
sed 's/^[[:blank:]]*//'
(与任何 一起工作sed
)或sed $'s/^[ \t]*//'
(在 ksh/Bash/etc. 中为 提供文字制表符sed
)
正如评论中所述,/g
说明符不执行任何操作,因为行首仅在行中出现一次,甚至/g
不会多次重试该模式。您需要显式添加条件分支来重复替换:sed -e :a -e 's/^ //' -e ta
^ *
也匹配空字符串(没有空格),但这并不重要。如果要匹配至少有一个空格的行,请在扩展正则表达式中使用^ *
(双空格) 或。^ +
例如,要将所有缩进更改为恰好两个空格,请使用 sed -e 's/^ */ /'
or sed -Ee 's/^ +/ /'
(-E
例如 GNU 和 FreeBSD 支持)
答案2
您也可以使用下面的 awk 命令来完成此操作
awk '{gsub("^ *","",$0);print $0}' filename