我有一个名为的文件abc.csv
,其中包含以下 6 行:
xxx,one
yyy,two
zzz,all
aaa,one
bbb,two
ccc,all
现在,无论何时all
出现在一行中,该行都应该被替换为one
and two
,即:
xxx,one
yyy,two
zzz,one
zzz,two
aaa,one
bbb,two
ccc,one
ccc,two
有人可以帮助如何做到这一点吗?
$ 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
在sed
:
sed '/,all$/{ s/,all$/,one/p; s/,one$/,two/; }'
当行,all
尾匹配时,先替换all
为one
并打印;然后替换one
为two
并让自动打印进行打印。