微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何替换文件中的特定字符

如何解决如何替换文件中的特定字符

我想替换文件中的特定字符。例如,我有一个 20 行的文件,我想替换第 5 行和第 12 列上的字母 a。 例子: 我在第 5 行的内容 Hello World! 我想用 !

替换 ?

这不能通过搜索和替换方法来完成,因为文件中的实际文本或多或少是随机的或经常变化的。我需要在第 5 行第 12 列指定未知字符,然后替换

解决方法

编辑 - 比我的答案更好:

来自@Cyrus:

sed -E '5 s/(.{11})./\1?/' your_file

来自@potong:

sed '5s/./?/12' your_file

我的原始答案(只是为了与更清洁的方法形成对比)

这样做:

sed '5 s/\(.\{11\}\).\(.*\)/\1?\2/' your_file

它的工作方式如下:

  • 在第 5 行,执行替换
  • 我记得上面使用 \(\) 之间的内容
  • 第一个记住的部分匹配任意类型的 11 个字符 .\{11\}
  • 然后匹配任何类型的单个字符(在您的情况下,这将是 '!')
  • 第二个记住的部分匹配单个字符后的所有内容\{.*\}
  • 然后我们放回记住的内容\1\2
  • 但是我们用问号替换了单个匹配的字符

一旦您确认它符合您的要求,您就可以添加 -i 来执行 就地替换:

sed -i '5 s/\(.\{11\}\).\(.*\)/\1?\2/' your_file

如果我们使用扩展表达式标志(-E),我们不必逃避那么多 东西:

sed -E '5 s/(.{11}).(.*)/\1?\2/' your_file

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。