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

Bash 在unix中,如何替换文件中特定行的单词,bash,unix,replace,Bash,Unix,Replace,我在这里研究了其他问题,但还没有找到一个适合我的。我试图从文件中选择一行,并用另一个字符串替换该行上的字符串。所以我有一个名为my_course的文件。我试图修改我的课程中以“123”开头的一行。在那一行,我想用“1”替换字符串“0”。帮助?一种可能是使用sed: sed '/^123/ s/0/1/' my_course 在第一部分中,您只需为以123开头的行指定要查找的模式 在s/from/to/部分中,您已指定要执行的替换 请注意,默认情况下,替换后文件将写入标准输出。您可能希望:

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

一种可能是使用sed

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

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

请注意,默认情况下,替换后文件将写入标准输出。您可能希望:

  • 使用
    …>我的新课程

  • 使用切换至sed的
    -e
    开关执行“就地”替换

如果您使用的是破坏性就地变型,您可能需要使用
-iEXTENSION
,此外还需要保留一份原始版本的给定扩展名副本,以防出现问题

编辑: 要匹配存储在变量中的前缀所需的行,您必须用双引号括住sed脚本
,因为使用单个qoutes
将阻止变量扩展:

sed "/^$input/ s/0/1/" my_course
你试过这个吗: sed-e'[line]s/old_string/new_string/“我的课程”

注:不应该使用[],只是为了明确你应该把数字放在“s”之前

干杯

事实上,在这种情况下,-e是没有必要的,我可以只写

sed '<line number>s/<old string>/<new string>/' my_course
sed的//“我的课程”

向我们展示您尝试过的内容。我无法让它工作。我使用sed'/^$input/s/0,/1',我的课程$input包含特定行的第一个单词。这是因为0是字符串的一部分,而不是字符串本身。否,问题与您使用的引用字符有关。将阻止bash扩展$input。必须在表达式周围使用另一对
”,才能展开$input:
“/^$input/s/0/1/”
。不要忘记替换模式中的结束斜杠
/
,如您发布的示例所示。我收到一个错误,没有与搜索行相关的文件或目录。。。它说没有以$input开头的行,但有hanks,但在这种情况下,我不能使用行号,因为我的程序将修改文本文档,行号不会保持不变