用两条新线替换一条线



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

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

现在,每当all出现在一行中时,该行都应该被onetwo替换,即:

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匹配时,首先用one替换all并打印;然后用CCD_ 10代替CCD_。

最新更新