2010-07-18 67 views
3

這是我學習sed的第3篇文章。我有一個假設的要求。我希望能夠用'was'替換每行中的第3個單詞,其中單詞由空格分隔。如何使用sed替換一行中的第3個字

​​

所需的輸出:

hi this was me here 
hi this was me again 
hi this was me yet again 
hi this was  me 

不讓人請了如何使用SED做到這一點幫助。我嘗試了一些執行指令,但沒有奏效。 謝謝,

Jagrati

我找到了!我找到了!

好的,我終於得到了正確的指示。這工作:

sed -e 's/[^ ]*[^ ]/was/3' words 

回答

5

我總是做這樣的:符合使用第一和第二個字,然後使用反向引用自行更換。

sed 's/^\([^ ]*\) \([^ ]*\) is/\1 \2 was/' 
+0

這將失敗,因爲奇數空格的。 – Anders 2010-07-18 11:43:20

+0

的確,當我嘗試它時,它可以在第一行代替,但在後面的代碼中沒有。 – xyz 2010-07-18 11:50:30

+0

sed's/^ * \([^] * \)\ \ + \([^] * \)\ +是/ \ 1 \ 2是/'file>結果 – Anders 2010-07-18 13:09:57

6

,如果你不關心格式,這是一種簡單的方法

$ awk '{$3="was"}1' file 
hi this was me here 
hi this was me again 
hi this was me yet again 
hi this was me 
+0

+1,awk很好,剛開始閱讀awk編程語言。 – Anders 2010-07-18 12:16:24

+0

''''''''和'''之間的1是什麼意思? – odessos 2015-03-13 09:28:53

1

這看起來在字邊界,而不是隻有空白所以它工作時,有標點符號,太。它需要GNU sed

$ cat words 
hi this is me here 
hi this is me again 
hi this is me yet again 
hi this is  me 
hi this "is, me 
$ sed 's/\w\+\(\W\)/was\1/3' words 
hi this was me here 
hi this was me again 
hi this was me yet again 
hi this was  me 
hi this "was, me 
0

在任何類型的sed:

sed 's/^\([[:blank:]]*[^[:blank:]]\{1,\}[[:blank:]]\{1,\}[^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)[^[:blank:]]\{1,\}\(.*\)$/\1was\2/' words 
相關問題