将前导空格与 sed 匹配的正确方法(所有这些)?

use*_*970 1 sed regular-expression whitespace

如何将前导空格与sed(所有这些)匹配?我不是在谈论前导标签,而只是在前导空格上。

从我在 Nano 中做的一个小测试来看,这似乎是正确的:

sed "s/^ //g"
Run Code Online (Sandbox Code Playgroud)

你觉得这个方法有什么问题吗?


注意:“全部”是指文档中的所有前导空格,以防有 2 个或更多,而不仅仅是一个。

ilk*_*chu 7

删除前导空格: sed "s/^ *//"

删除前导空格: sed "s/^[[:space:]]*//"

删除前导空格和制表符:(sed "s/^[ \t]*//"适用于 GNU sed)或
sed 's/^[[:blank:]]*//'(适用于 any sed)或sed $'s/^[ \t]*//'(在 ksh/Bash/等中为 提供文字制表符sed

正如评论中所说,说明/g符什么都不做,因为行的开头在行中只出现一次,甚至/g不会多次重试模式。您需要显式添加条件分支以重复替换:sed -e :a -e 's/^ //' -e ta


^ *也匹配空字符串(无空格),但这在这里无关紧要。如果要匹配至少有一个空格的行,请使用^ *(double space) 或^ +扩展正则表达式。例如,要将所有缩进更改为两个空格,请使用 sed -e 's/^ */ /'sed -Ee 's/^ +/ /'-E在例如 GNU 和 FreeBSD 中受支持)