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