首页 > 解决方案 > 根据行号和列范围替换文本

问题描述

在文本文件中foo.txt

Lorem ipsum dolor sit amet
sed quam rutrum, interdum sodales ex
pellentesque urna placerat

我想用另一个字符串“fermentum”替换第 2 行从第10 列到第 16 列的文本,结果是:

Lorem ipsum dolor sit amet
sed quam fermentum, interdum sodales ex
pellentesque urna placerat

精度:正则表达式是捕获rutrum需要索引位置的否

标签: awksed

解决方案


这是一种如何使用sed从第 10 列(包括)到第 16 列(不包括)精确替换第 2 行中的文本的方法。

sed -E '2s/^(.{9})(.{5})(.*)$/\1fermentum\3/' foo.txt > bar.txt

-E用于避免转义括号和类似...

2意味着 - 正好在第二行

s方法substitute

^- 行首

(.{9})捕获 9 个任意单个字符('sed quam '在这种特殊情况下)

(.{5})捕获接下来的 5 个字符 ( 'rutrum')

(.*)捕获零个或多个剩余字符 ( ', interdum sodales ex')

$- 行结束

\1- 引用第一个捕获的文本

\3- 引用第三个捕获的文本

> bar.txt负责将结果存储在bar.txt

更多细节可以在这里找到。


推荐阅读