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

How to replace a specific character in a file, only on the lines by counting this specific character in the line?

我想将第 7 行中的第 4 个逗号加倍,而在一个文件夹的所有 csv 中只有 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

但是不知道具体的工作怎么做...

您需要 select 仅包含正好包含 7 个逗号的行,然后仅对这些行进行操作。你可以用 sed:

sed '/^\([^,]*,\)\{7\}[^,]*$/s/,/&&/4'

其中 ^\([^,]*,\)\{7\}[^,]*$ 定义了恰好包含 7 个逗号的行。

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

awk -F, -v OFS=, 'NF == 8 {  =  OFS } 1'

这会将输入和输出字段分隔符设置为 ,,然后对于具有 8 个字段(7 个逗号)的行,在第 4 个字段的末尾附加一个 ,,将逗号加倍。最后的 1 确保打印每一行。