我想使用awk match()和substr打印匹配發生前的所有內容。我用awk在bash腳本拔出從文件名稱的字符串,並嘗試以下操作:如何在比賽前打印所有內容?
awk 'match($0,".S") {print substr($0, RSTART+1, 3)}'
這給了我3個字符,小號再加上2下吧。
但是,我想要的是打印比賽前的一切。
我該怎麼做?
我想使用awk match()和substr打印匹配發生前的所有內容。我用awk在bash腳本拔出從文件名稱的字符串,並嘗試以下操作:如何在比賽前打印所有內容?
awk 'match($0,".S") {print substr($0, RSTART+1, 3)}'
這給了我3個字符,小號再加上2下吧。
但是,我想要的是打印比賽前的一切。
我該怎麼做?
這應該適合你。
awk '{i = index($0, ".S"); if (i>0) print substr($0, 0, i+5)}'
我寧願使用:
sed 's/.S.*//'
這不會給OP所要查找的輸出。 –
AFAIU OP需要一個文件名,後面跟着一些char和大寫字母S,例如'echo filename:S:othertext:morecapital.S | sed's/.S。* //''提取文件名。 – Thor
我解釋他想包括字符(或字面點)和「S」以及接下來的兩個字符以及初始字符串。問題中的關鍵詞是「也」。 –
只是次要的重排:
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../'
找到了。 awk -F「[。S]」 – user1492268