2

我有一个名为的文件abc.csv,其中包含以下 6 行:

xxx,one
yyy,two
zzz,all
aaa,one
bbb,two
ccc,all

现在,无论何时all出现在一行中,该行都应该​​被替换为oneand two,即:

xxx,one
yyy,two
zzz,one
zzz,two
aaa,one 
bbb,two
ccc,one
ccc,two

有人可以帮助如何做到这一点吗?

4

2 回答 2

1
$ awk -F, -v OFS=, '/all/ { print $1, "one"; print $1, "two"; next }1' foo.input
xxx,one
yyy,two
zzz,one
zzz,two
aaa,one
bbb,two
ccc,one
ccc,two

如果您想坚持使用纯外壳解决方案:

while read line; do
    if [[ "${line}" = *all* ]]; then
        echo "${line%,*},one"
        echo "${line%,*},two"
    else
        echo "${line}"
    fi
done < foo.input
于 2013-08-15T18:32:58.163 回答
0

sed

sed '/,all$/{ s/,all$/,one/p; s/,one$/,two/; }'

当行,all尾匹配时,先替换allone并打印;然后替换onetwo并让自动打印进行打印。

于 2013-08-16T00:53:33.687 回答