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

g52tjvyc  于 2023-01-25  发布在  Unix
关注(0)|答案(3)|浏览(182)

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

qxgroojn

qxgroojn1#

一种可能是使用sed

sed '/^123/ s/0/1/' my_course
  • 在第一个/../部分中,您只需为以123开头的行指定要查找^123的模式。
  • s/from/to/部分中,您已经指定了要执行的替换。

请注意,默认情况下,替换后文件将被写入stdout。您可能需要:

  • 使用... > my_new_course重定向输出
  • 使用-e开关执行到sed的“就地”替换

如果你使用的是破坏性的原地变量,你可能需要使用-iEXTENSION,另外还需要保留一个原始版本的给定扩展的副本,以防出现问题。

**EDIT:**要将所需的行与存储在变量中的前缀匹配,您必须用双引号将sed脚本括起来",因为使用单引号'将防止变量扩展:

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

egmofgnx2#

你试过这个吗:sed-e '[行] s/旧字符串/新字符串/'我的课程
附言:[]不应该用,是不是只是为了说明你应该把数字放在"s"的前面。
干杯!
实际上,本例中的-e不是必需的,我可以只写

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

eufgjt7s3#

这就是我在Fedora 36,GNU bash,版本5.2.15(1)-release(x86_64-redhat-linux-gnu)上的工作:

sed -i '1129s/additional/extra/' en-US/Design.xml

我知道你说过你不能用行号;我不知道如何处理这一部分,但这将该文件第1129行的“additional”替换为“extra”。

相关问题