regex - 用 sed 替换正则表达式的第 N 个匹配项
问题描述
我有一个看起来像这样的数据集:
1099511629352|Nunez|Jorge|female|17/11/2000|2011-04-04T05:54:52.693+0000|201.221.59.59|Opera|Facebook
在这种情况下,列分隔符是|
-> 我想$pos
使用 sed 替换给定一行 id 的第 N 列 ( )。
这是我现在想出的:
查找正则表达式的第 N 个匹配项
[$columnsep]*[a-zA-Z0-9./\-:+]+
以给定开头的行
$id
- 用
$columnsep$editvalue
所以适当的 sed 命令是:
sed "/^$id/[$columnsep]*[a-zA-Z0-9./\-:+]+/$columnsep$editvalue/$pos}" $file
我明白[a- ...": invalid command code [
了,尽管它适用于https://regexr.com/等在线正则表达式测试器
解决方案
$columnsep
除非长于一个字符,否则这样的东西就可以完成这项工作。
sed "/^$id/s/[$columnsep]*[^$columnsep]*/$columnsep$editvalue/$pos" "$file"
但是,我建议使用 awk 来完成这样的任务
awk -F "$columnsep" -v OFS="$columnsep" -v id="$id" -v editvalue="$editvalue" -v pos="$pos" '
($1==id){$pos=editvalue}1' "$file"
推荐阅读
- botframework - 在 Azure 中测试网络聊天
- javascript - javascript array like function (javascript indexer C# like)
- java - IntelliJ IDEA 中的 Google java 格式
- javascript - 在 v-for 列表中搜索 giphy url (Vue.js)
- spring - 测试之间的嵌入式 Kafka 刷新消息
- matlab - 计算匿名函数的二阶导数
- javascript - 回调使用 video.js 缓冲的百分比
- encryption - 使用现有数据在 Redshift 集群上启用加密
- r - 是否有一个 R 函数仅在载荷 Comp.1 上提取 Summary(pca,Loading=T) 的值
- r - openxlsx - 根据另一列中的文本填充行行