2012-10-13 85 views
2

n個空格,如果我有一個字符串,它是這樣的:匹配詞後使用SED/AWK

word_1一些測試

有沒有什麼方法可以讓我獲得第二個或第三個單詞使用sed/awk

+0

Grep不是最好的工具。看看sed或awk。 –

+0

@PaulTomblin:將問題更改爲'sed' /'awk'。 –

回答

2

如果你想每行的第三個字,然後使用cut -f 3 file_name。如果你只希望第三個單詞匹配一個特定的字符串awk '/^word_1/ { print $3; }' file_name或類似的東西(這已經有一段時間了,因爲我已經使用了awk,所以在使用它之前我必須查找語法)。

1

使用awk可以使用for循環在n個空格之後打印單詞。如果你有保存在bash可變空間的數量,你可以這樣做:

spaces=0 
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt 

結果:

word_1 something test 

spaces=1 
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt 

結果:

something test 

spaces=2 
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt 

結果:

test 
+0

此外,你的男人希望將字段分隔符設置爲單個空格。你可以使用這個標誌:'-F「」',這樣代碼看起來就像'awk -F「」-v n = ...'。否則'awk'將任何數量的空白視爲字段分隔符。 HTH。 – Steve

+0

這似乎過於複雜。 – Bernhard

+0

@Bernhard:我認爲OP正在尋找在_n_空格之後打印單詞,儘管不清楚「空格」是什麼。這是單個空間還是未知數量的空白?在我的回答中,我已經逐字地說出了這個詞,並在我的第一條評論中爲單個空間添加了一個選項。我假設OP對'awk' /'sed'有基本的瞭解,但可能沒有考慮使用'for'循環。 'printf'語句和變量輸入只是鐘聲和哨聲。 – Steve

2

如果你只是想每一行的第二個或第三個字,我只用awk這樣的:

awk '{ print $2 }' file.txt 

用於第二單詞,或$3而不是$2第三等

@保羅·湯姆林的建議與cut也很好,雖然我的意見是,我是如果我想用awk這個簡單的東西,我會用它,而不是花時間和大腦細胞來找出我需要使用其他隨機Posix命令的神祕選項。也就是說,我認爲值得集中精力去學習更一般的工具(如awk)。

0

這可能會爲你工作(GNU SED):

echo {a..z} | sed -r 's/(\s*(\S*)){10}.*/\2/' 
j 

哪裏{10}可以是任意數量的如{2}將返回b

對於高位數字awk是一個更有效率。