awk - 根据行号和列范围替换文本
问题描述
在文本文件中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
需要索引位置的否
解决方案
这是一种如何使用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
更多细节可以在这里找到。
推荐阅读
- java - Liquibase 唯一约束不适用于名为“名称”的列,但适用于任何其他列
- typescript - 打字稿枚举值如何比较?
- react-native - react-native 多选更改选择文本颜色
- kubernetes-helm - helmfile 差异因“在 <.Values.db.password> 处执行“stringTemplate”而失败:map 没有键“password”的条目”
- angular - 禁用拖放功能 Kendo Angular Grid
- python - 如何修复当前错误:无法解决主机错误
- maven - 使用属性 maven 插件迭代器插件和资源插件时跳过非现有资源目录问题
- windows - 批处理脚本何时不执行除错误之外的所有命令
- c - 当您不初始化指针时会发生什么?
- javascript - 通过 Reactjs 中的复选框连接数组