如何在unix中替换文件中特定行的单词

时间:2013-03-26 20:30:49

标签: bash unix replace

我已经在这里研究了其他问题,但还没有找到适合我的问题。我正在尝试从文件中选择一个特定的行,并用另一个字符串替换该行上的字符串。所以我有一个名为my_course的文件。我正在尝试修改my_course中以“123”开头的一行。在那一行,我想用“1”替换字符串“0”。帮助

2 个答案:

答案 0 :(得分:6)

一种可能性是使用 sed

sed '/^123/ s/0/1/' my_course
  • 在第一个/../部分中,您只需为从123开始的行指定您要查找的模式^123

  • s/from/to/部分,您已指定要执行的替换。

请注意,默认情况下,替换后文件将写入stdout。你可能想:

  • 使用... > my_new_course

  • 重定向输出
  • 使用-e开关进行“就地”替换

如果您使用的是破坏性原位变体,除了保留原始版本的给定EXTENSION版本以防出现问题之外,您可能还需要使用-iEXTENSION

修改 要使用存储在变量中的前缀匹配所需内容,您必须使用双引号"将sed脚本括起来,因为使用单个qoutes '将阻止变量扩展:

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

答案 1 :(得分:3)

你试过这个: sed -e'[line] s / old_string / new_string /'my_course

PS:不应该使用[],是否只是要清楚地说明你应该把数字放在“s”之前。

干杯!

事实上,在这种情况下-e没有必要,我只能写

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