Terminal 如何通过计算行中的特定字符来替换文件中的特定字符,仅替换行中的特定字符?

Terminal 如何通过计算行中的特定字符来替换文件中的特定字符,仅替换行中的特定字符?,terminal,command,command-line-interface,text-processing,Terminal,Command,Command Line Interface,Text Processing,我想在一个文件夹的所有csv中增加一倍第4个逗号,共7行,仅7个逗号 在此命令行中,我将第4个逗号加倍: sed  's/,/,,/4' Person_7.csv > new.csv 在此命令行中,我可以查找并计算一行中的所有逗号: sed 's/[^,]//g' dat | awk '{ print length }' 在这个命令行中,我可以计算并创建一个新文件,其中的行包含7个逗号: awk -F , 'NF == 7' <Person_test.csv >Pers

我想在一个文件夹的所有csv中增加一倍第4个逗号,共7行,仅7个逗号

在此命令行中,我将第4个逗号加倍:

sed  's/,/,,/4' Person_7.csv > new.csv
在此命令行中,我可以查找并计算一行中的所有逗号:

sed 's/[^,]//g' dat | awk '{ print length }'  
在这个命令行中,我可以计算并创建一个新文件,其中的行包含7个逗号:

awk -F , 'NF == 7' <Person_test.csv >Person_7.csv

但是我不知道如何做具体的工作…

您需要一些东西来只选择正好包含7个逗号的行,然后只在这些行上操作。您可以使用sed执行此操作:

sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'
其中^\[^,]*,\\{7\}[^,]*$定义了一个正好包含7个逗号的行

不过,使用awk更容易一些:

awk -F, -v OFS=, 'NF == 8 { $4 = $4 OFS } 1'
这会将输入和输出字段分隔符设置为、,然后对于包含8个字段的行,7个逗号会在第4个字段的末尾添加一个,使逗号加倍。最后的1确保每一行都被打印出来