【发布时间】:2019-04-07 06:14:06
【问题描述】:
我有几个 .csv 文件,每个 csv 文件都有如下所示的行。
AA,1,CC,1,EE
AA,FF,6,7,8,9
BB,6,7,8,99,AA
我正在阅读每个 csv 文件的每一行,然后尝试用“ZZ”替换以 AA 开头的每一行的第 4 位
预期输出
AA,1,CC,ZZ,EE
EE,FF,6,ZZ,8,9
BB,6,7,8,99,AA
但是变量“y”确实分别包含第四个变量“1”和“7”,但是当我使用 sed 命令时,它会将第一次出现的“1”替换为“ZZ”。
如何修改我的代码以仅替换每行的第 4 位,而不管它的值是多少?
我的代码是这样的
$file = "包含所有 csv 文件列表的文件名"
for i in `cat file`
while IFS = read -r line;
do
if [[ $line == AA* ]] ; then
y=$(echo "$line" | cut -d',' -f 4)
sed -i "s/${y}/ZZ/" $i
fi
done < $i
【问题讨论】:
-
为什么第 2 行开头的
AA变成了EE? -
一次运行
sed绝对是一种可怕的反模式。您希望使用单个进程处理整个文件,尤其是避免多次重写文件。