2016-01-22 113 views
2

我有投入,看起來像: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腳本運行的東西都是開放的。

+0

我不知道爲什麼這會得到downvoted?它有明確的要求,樣本輸入,預期的輸出和嘗試的解決方案。我們還能要求什麼? Upvoting到櫃檯。 –

+0

這個問題清楚地顯示了研究的努力,並清楚地解釋了這個問題,所以我也很高興。看到新用戶提出好問題令人耳目一新。理查德,歡迎你! –

回答

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

Jeebus。你知道嗎,除了我忘記星號之外,我試過了。謝謝,埃德。 –

1

如果您使用GNU sed的,下面應該工作:

sed 's/^\W*//' 

這錨表達在該行的起點和匹配零個或多個連續的非W¯¯ ORD字符,用空字符串替換它們。請注意,字符包含所有字母數字字符 - 和下劃線。所以,不幸的是,如果在開始時非字母數字字符之間有下劃線,這將不起作用(謝謝Ed)。

我發現上面的語法更容易輸入(並記住),但它不像POS的兼容(可移植到其他系統),如埃德的答案。

+1

@EdMorton好的斑點。我忘了下劃線字符也被認爲是*字*字符。我會在我的答案中添加這項限制條款。謝謝。 –

相關問題