2012-06-30 18 views
3

我想使用awk match()和substr打印匹配發生前的所有內容。我用awk在bash腳本拔出從文件名稱的字符串,並嘗試以下操作:如何在比賽前打印所有內容?

awk 'match($0,".S") {print substr($0, RSTART+1, 3)}' 

這給了我3個字符,小號再加上2下吧。

但是,我想要的是打印比賽前的一切。

我該怎麼做?

+2

找到了。 awk -F「[。S]」 – user1492268

回答

1

這應該適合你。

awk '{i = index($0, ".S"); if (i>0) print substr($0, 0, i+5)}' 
0

我寧願使用:

sed 's/.S.*//' 
+0

這不會給OP所要查找的輸出。 –

+0

AFAIU OP需要一個文件名,後面跟着一些char和大寫字母S,例如'echo filename:S:othertext:morecapital.S | sed's/.S。* //''提取文件名。 – Thor

+0

我解釋他想包括字符(或字面點)和「S」以及接下來的兩個字符以及初始字符串。問題中的關鍵詞是「也」。 –

3

只是次要的重排:

awk 'match($0, "\.S") {print substr($0, 1, RSTART + 3)}' 

這告訴AWK打印從通過 「S」 的第一個字符和接下來的兩起字符。

sed得到同樣的結果:

簡易版(「.S」只能出現一次:

sed 's/\(.*\.S..\).*/\1/' 

如果「.S」可以出現不止一次,這個版本給人的相同的結果AWK版本(僅第一個「.S」和它的兩個以下字符被保持):

sed 's/\.S../&\n/; s/\n.*//' 

編輯:

perl -nle 'print "$`$&" if /\.S../'