用两个新行替换一行

时间:2013-08-15 17:23:04

标签: linux shell unix scripting

我有一个名为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

有人可以帮忙怎么做?

2 个答案:

答案 0 :(得分: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

如果您想坚持使用仅限shell的解决方案:

while read line; do
    if [[ "${line}" = *all* ]]; then
        echo "${line%,*},one"
        echo "${line%,*},two"
    else
        echo "${line}"
    fi
done < foo.input

答案 1 :(得分:0)

sed

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

当该行与最后的,all匹配时,首先将all替换为one并打印出来;然后用one替换two并让自动打印进行打印。