sed:删除所有字符,直到第一个字母数字字符

时间:2016-01-22 19:17:44

标签: regex shell awk sed

我输入的内容如下:

    -|+ string1
   IAmString2-OrAmI\ \   \
\ - 3string3+string4

我希望输出为:

string1
IAmString2-OrAmI\ \   \
3string3+string4

换句话说,我想读取字符串的开头,直到我遇到一个字母数字字符,然后打开该字符的其余部分,无论其内容如何。

我最接近:

sed -n 's/[[:alnum:]]/&\n/;s/.*\n//p'

但是删除了并包含第一个字母数字字符,所以我的输出看起来像:

tring1
AmString2-OrAmI\ \  \
string3+string4

有什么想法吗?我对任何可以使用bash脚本工作的东西持开放态度。

2 个答案:

答案 0 :(得分:2)

$ sed 's/^[^[:alnum:]]*//' file
string1
IAmString2-OrAmI\ \   \
3string3+string4

答案 1 :(得分:1)

如果您使用的是GNU sed,则以下内容应该有效:

sed 's/^\W*//'

这将表达式锚定在行的开头,并匹配零个或多个连续的非 W ord字符,用空字符串替换它们。请注意, word 字符包括所有字母数字字符 - 和下划线。所以,不幸的是,如果开头的非字母数字字符中有下划线(感谢,Ed),这将不起作用。

我发现上面的语法更容易输入(并记住),但它不是POSIX兼容(可移植到其他系统),如Ed的答案。