如何替换文件中的特定字符
Posted
技术标签:
【中文标题】如何替换文件中的特定字符【英文标题】:how to replace a specific char in a file 【发布时间】:2021-08-23 10:19:49 【问题描述】:我想替换文件中的特定字符。例如,我有一个 20 行的文件,我想替换第 5 行第 12 列的字母 a。
例子:
我在第 5 行有什么 hello world!
我想用?
替换!
这不能通过搜索和替换方法来完成,因为文件中的实际文本或多或少是随机的或经常更改。我需要在第 5 行第 12 列指定未知字符,然后替换
【问题讨论】:
【参考方案1】:编辑 - 比我更好的答案:
来自@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
【讨论】:
我觉得你可以稍微精简一下:sed -E '5 s/(.11)./\1?/' your_file
或许sed '5s/./?/12' file
?以上是关于如何替换文件中的特定字符的主要内容,如果未能解决你的问题,请参考以下文章