2013-03-26 54 views
-3

我已經研究了這裏的其他問題,但還沒有真正找到一個對我的作品。我試圖從文件中選擇特定的行,並用另一個字符串替換該行上的字符串。所以我有一個名爲my_course的文件。我試圖修改my_course中以「123」開頭的一行。在那一行我想用「1」替換字符串「0」。幫幫我?我怎樣才能在特定的線替換字的文件中UNIX

+0

向我們展示你已經嘗試了什麼。 – 2013-03-26 20:38:12

回答

5

一種可能是使用sed的

sed '/^123/ s/0/1/' my_course 
  • 在第一/../部分,你只需要指定模式你正在尋找^123了開頭的行123

  • 在您指定的替代部分s/from/to/要執行。

請注意,默認情況下,在替換之後,文件將寫入stdout。你可能會想:

  • 重定向使用... > my_new_course

  • 「到位」執行替換使用-e開關輸出。如果您使用的是地方的破壞性的sed

您可能希望使用-iEXTENSION,以便在出現問題時保留原始版本的給定EXTENSION的副本。

編輯: 要匹配所需的存儲在一個變量,你必須用雙引號"爲使用單qoutes '將阻止變量擴展到封閉sed腳本的前綴內襯:

sed "/^$input/ s/0/1/" my_course 
+0

我不能得到它的工作。 im使用sed'/^$ input/s/0,/ 1,'my_course – user2012751 2013-03-26 20:45:27

+0

$ input包含特定行的第一個字 – user2012751 2013-03-26 20:46:14

+0

它會是因爲0,是字符串的一部分而不是字符串本身 – user2012751 2013-03-26 20:52:19

2

有無你試過這個: sed -e'[line] s/old_string/new_string /'my_course

PS:不應該使用[],只是爲了說清楚你應該把數字放在前面這個「的」。

乾杯!

事實上,在這種情況下,-e是沒有必要的,我可以寫只是

sed '<line number>s/<old string>/<new string>/' my_course 
+0

謝謝,但在這種情況下,我不能使用行號,因爲我的程序將修改文本文件和行號不會保持不變 – user2012751 2013-03-26 20:47:55