2013-12-20 67 views
-1

我知道我可以使用sed用一個不同的詞替換文件中的一個字。但是如果我有一個可能在文件中出現多次的單詞,我只想在特定行中進行更改。 可以說我有替換文件中的一行中的一個字

hello unix world olga unix olga unix 
hello unix 2013 world 

假設我知道行號,我該如何更換第二「UNIX」的第一行,並讓別人改變? 所有表達式以及行號保存在變量

+1

在您的意見如下,你添加額外的標準,你沒有提到你的問題。請更新您的問題以包含任何附加條件以及您已經嘗試過的代碼。 – Donovan

回答

0

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

sed '1s/unix/whatever/2' file 
0

如果是一號線,你可以使用:

sed '1s/unix/windows/' < input.txt 

然而,如果你想更換UNIX的第一 occurence,那麼這個任務就有點多了。從理論上講,sed允許指定匹配數爲:

sed 's/unix/windows/1' < input.txt 

然而,它是不可移植的,並且可以幾乎不能預知。或者使用更具體的模式(假設這樣的行確實具有唯一的模式)或使用awk或某種其他腳本語言可能更容易。

+0

讓我們假設我知道它是哪條線。如果我在同一行中有兩次或更多的「unix」,並且我只想替換最後一個(我想要更改的單詞肯定會出現在行末) – littlerunaway

+0

使用''1s/unix $/windows /'' –

+0

如果我需要的單詞保存在一個名爲unix的變量中,我可以使用'1s /&unix $/windows /'嗎? – littlerunaway

0

您可以擴大您的搜索模式,只包括你要找的東西。

在你的情況,你可以尋找

sed 's/unix$/windows/' 

它說,搜索unix在一行$的結束和替換它與windows

0
sed '1s/unix$/windows/' file 

它取代只在第一行,只有最後一個字,如果它是unix

,如果你想要做的就地更換,使用sed -i 's/...' file

+0

如果我查找的單詞保存在名爲unix的變量中,該怎麼辦?將$ unix $工作,以改變行末的單詞? – littlerunaway

+0

@littlerunaway然後你需要'sed's/$ unix $/foo /''注意,雙引號很重要。 – Kent

+0

如果行號也是一個變量? – littlerunaway

0

1號線與「窗口」一詞取代「UNIX」如果「UNIX」出現在該行的末尾:

sed 's1/unix$/windows/' input_file > output_file 

S1約束比賽1號線

$約束比賽進行到行的末尾

相關問題