我输入的内容如下:
-|+ string1
IAmString2-OrAmI\ \ \
\ - 3string3+string4
我希望输出为:
string1
IAmString2-OrAmI\ \ \
3string3+string4
换句话说,我想读取字符串的开头,直到我遇到一个字母数字字符,然后打开该字符的其余部分,无论其内容如何。
我最接近:
sed -n 's/[[:alnum:]]/&\n/;s/.*\n//p'
但是删除了并包含第一个字母数字字符,所以我的输出看起来像:
tring1
AmString2-OrAmI\ \ \
string3+string4
有什么想法吗?我对任何可以使用bash脚本工作的东西持开放态度。
答案 0 :(得分:2)
$ sed 's/^[^[:alnum:]]*//' file
string1
IAmString2-OrAmI\ \ \
3string3+string4
答案 1 :(得分:1)
如果您使用的是GNU sed,则以下内容应该有效:
sed 's/^\W*//'
这将表达式锚定在行的开头,并匹配零个或多个连续的非 W ord字符,用空字符串替换它们。请注意, word 字符包括所有字母数字字符 - 和下划线。所以,不幸的是,如果开头的非字母数字字符中有下划线(感谢,Ed),这将不起作用。
我发现上面的语法更容易输入(并记住),但它不是POSIX兼容(可移植到其他系统),如Ed的答案。