如何替换文件中的特定字符
how to replace a specific char in a file
我想替换文件中的特定字符。例如,我有一个 20 行的文件,我想替换第 5 行第 12 列的字母 a。
例子:
我在第 5 行的内容 hello world!
我想用 ?
替换 !
这不能通过搜索和替换方法完成,因为文件中的实际文本或多或少是随机的或经常更改。我需要在第 5 行第 12 列指定未知字符,然后替换
编辑 - 比我的答案更好:
来自@Cyrus:
sed -E '5 s/(.{11})./?/' your_file
来自@potong:
sed '5s/./?/12' your_file
我的原始答案(只是为了与更简洁的方法进行对比)
这样做就可以了:
sed '5 s/\(.\{11\}\).\(.*\)/?/' your_file
其工作方式如下:
- 在第 5 行,执行替换
- 我记得使用
\(
和 \)
之间的内容
- 第一个记住的部分匹配任何类型的 11 个字符
.\{11\}
- 然后匹配任何类型的单个字符(在你的情况下
'!')
- 第二个记住的部分匹配单个字符后的所有内容
\{.*\}
- 然后我们把记住的内容放回去
</code>和<code>
- 但是我们用问号替换单个匹配字符
一旦你确认它做你想要的,你可以添加 -i
来做
就地替换:
sed -i '5 s/\(.\{11\}\).\(.*\)/?/' your_file
如果我们使用扩展表达式标志 (-E
) 我们就不必转义那么多
东西:
sed -E '5 s/(.{11}).(.*)/?/' your_file
我想替换文件中的特定字符。例如,我有一个 20 行的文件,我想替换第 5 行第 12 列的字母 a。
例子:
我在第 5 行的内容 hello world!
我想用 ?
!
这不能通过搜索和替换方法完成,因为文件中的实际文本或多或少是随机的或经常更改。我需要在第 5 行第 12 列指定未知字符,然后替换
编辑 - 比我的答案更好:
来自@Cyrus:
sed -E '5 s/(.{11})./?/' your_file
来自@potong:
sed '5s/./?/12' your_file
我的原始答案(只是为了与更简洁的方法进行对比)
这样做就可以了:
sed '5 s/\(.\{11\}\).\(.*\)/?/' your_file
其工作方式如下:
- 在第 5 行,执行替换
- 我记得使用
\(
和\)
之间的内容
- 第一个记住的部分匹配任何类型的 11 个字符
.\{11\}
- 然后匹配任何类型的单个字符(在你的情况下 '!')
- 第二个记住的部分匹配单个字符后的所有内容
\{.*\}
- 然后我们把记住的内容放回去
</code>和<code>
- 但是我们用问号替换单个匹配字符
一旦你确认它做你想要的,你可以添加 -i
来做
就地替换:
sed -i '5 s/\(.\{11\}\).\(.*\)/?/' your_file
如果我们使用扩展表达式标志 (-E
) 我们就不必转义那么多
东西:
sed -E '5 s/(.{11}).(.*)/?/' your_file