shell - 修改两个模式之间的每一行字符

标签 shell file vim sed

我需要修改每行中两个模式之间的某些字符。

示例::(文件内容另存为 myfile.txt)

abc, def, 1, {,jsdfsd,kfgdsf,lgfgd}, 2, pqr, stu
abc, def, 1, {,jsdfsqwe,k,fdfsfl}, 2, pqr, stu
abc, def, 1, {,asdasdj,kgfdgdf,ldsfsdf}, 2, pqr, stu
abc, def, 1, {,jsds,kfdsf,fdsl}, 2, pqr, stu

我想像下面提到的那样编辑和保存 myfile.txt
abc, def, 1, {jsdfsd kfgdsf lgfgd}, 2, pqr, stu
abc, def, 1, {jsdfsqwe k fdfsfl}, 2, pqr, stu
abc, def, 1, {asdasdj kgfdgdf ldsfsdf}, 2, pqr, stu
abc, def, 1, {jsds kfdsf fdsl}, 2, pqr, stu

我使用以下命令来编辑和保存 myfile.txt
sed '/1,/,/,2/{/1,/n;/,2/!{s/,/ /g}}' myfile.txt

这个命令没有帮助我实现我的目标。请帮助解决这个问题。

最佳答案

awk 在这种情况下会更合适:

awk 'BEGIN{ FS=OFS=", " }{ gsub(/,/, " ", $4); sub(/\{ /, "{", $4) }1' file

输出:
abc, def, 1, {jsdfsd kfgdsf lgfgd}, 2, pqr, stu
abc, def, 1, {jsdfsqwe k fdfsfl}, 2, pqr, stu
abc, def, 1, {asdasdj kgfdgdf ldsfsdf}, 2, pqr, stu
abc, def, 1, {jsds kfdsf fdsl}, 2, pqr, stu

关于shell - 修改两个模式之间的每一行字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49443897/

相关文章:

vim - 使 Vim 在使用 Ctrl-A 递增十六进制数字时使用大写字母

linux - 标签而不是美元符号 ssh shell

linux - 使用作为 bash 脚本参数传递的 glob 表达式

python - 搜索文件并找到完全匹配并打印行?

vim - ctags、vimwiki、vim 和 tagbar-plugin

c++ - VIM+ctags+omnicppcomplete

python - 如何通过shell脚本激活python虚拟环境

linux - 在 Linux 中使用 shell 脚本从当前目录中的文件递归搜索和提取子字符串?

java - JUnit 和文件写访问

java - 用 Java 确定文件总字数的最佳方法是什么?