sed - 如何使用 sed 替换 shell 中的第二列
问题描述
我file
看起来像这样:
1,2,3,4
5,6,7,8
我想替换包含 6 到 89 的第二列。所需的输出是
1,2,3,4
5,89,7,8
但是如果我输入
index=2
cat file | sed 's/[^,]*/89/'$index
我明白了
1,89,3,4
5,89,7,8
如果我输入
index=2
cat file | sed 's/[^,]6/89/'$index
没有什么变化。为什么会这样?我怎样才能解决这个问题?谢谢你。
解决方案
由于您要更改包含 a 的第二列,6
并且您有一个逗号作为字段分隔符,因此实际上很容易使用sed
:
sed 's/^\([^,]*\),6,/\1,89,/`
在这里,我们使用反向引用来记住第一列。
如果要替换6
第 5 列中的 ,可以执行以下操作:
sed 's/^\(\([^,]*,\)\{4\}\)6,/\189,/'
然而,使用它更舒服awk
:
awk 'BEGIN{FS=OFS=","}($2==6){$2=89}1'
推荐阅读
- c++ - 从创建的类中获取用户输入
- javascript - Express Route 处理程序未针对文件类型路径触发
- javascript - 需要帮助从深层数组中提取对象并组合成一个数组
- php - 包裹在 while 循环中会创建额外的 div
- android - 我需要 MODIFY_AUDIO_SETTINGS 权限做什么?
- linux - 如果文件的列匹配,AWK 过滤到文件
- python - Python如何遍历df并输出html代码
- apache-drill - 在钻表中使用`store.format`='csv'时如何处理字符串字段中没有转义逗号
- nginx - Kubernetes nginx 入口没有解析服务
- flask - 我想让我的单租户前夕应用程序多租户,也许使用烧瓶登录