【发布时间】:2021-08-23 10:19:49
【问题描述】:
我想替换文件中的特定字符。例如,我有一个 20 行的文件,我想替换第 5 行第 12 列的字母 a。
例子:
我在第 5 行有什么 hello world!
我想用?替换!
这不能通过搜索和替换方法来完成,因为文件中的实际文本或多或少是随机的或经常更改。我需要在第 5 行第 12 列指定未知字符,然后替换
【问题讨论】:
我想替换文件中的特定字符。例如,我有一个 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
它的工作方式如下:
\(和\)之间的东西
.\{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?