如何删除数组中最后一行末尾的逗号

时间:2015-11-04 17:04:16

标签: bash sed

我正在使用sed '$s/,$//'尝试删除数组最后一行末尾的逗号,该数组的行上有开括号和右括号(如下所示)。此命令sed '$s/,$//'未按预期工作。

如果我执行sed '$s/]$//'它会删除关闭的数组括号,所以我知道我在正确的轨道上......

[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]},
]

这是针对bash脚本的。请不要提供使用perl的答案。

4 个答案:

答案 0 :(得分:1)

最后一行没有逗号,因此'$s/,$//'不适用于sed

您可以使用sed代替awk

awk '$1 == "]"{sub(/,$/, "", s)} NR>1{print s} {s=$0} END{print s}' file
[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]}
]

或者您可以使用此perl命令:

perl -0pe 's/,(\s\])/$1/' file
[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]}
]

答案 1 :(得分:0)

虽然您已经使用awk得到答案,但请注意使用bash提供的内置插件可以完成同样的事情:

#!/bin/bash

[ -r "$1" ] || {  ## validate filename given as argument
    printf "error: file not readable. usage: %s filename\n" "${0##*/}"
    exit 1
}

while read -r line; do 

    [ -z "$last" ] && { last="$line"; continue; } ## if last not set, continue

    if [ "$line" == "]" ]; then  ## if line "]", check last
        [ ${last:(-1)} == ',' ] && last=${last%,}  ## check for & remove comma
    fi

    [ -z "$last" ] || echo $last  ## echo if $last set
    last="$line"

done <"$1"
echo $last  ## print final line

exit 0

<强>输出

$ bash stripcomma.sh dat/endcomma.txt
[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]}
]

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 'N;s/,(\n])/\1/;P;D' file

阅读两行,并在,处的]之前删除<div class="container"> <div class="some-class"> <div class="orbit"> <h2><span class="jumbotron-info">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam</span></h2> <img class="img-orbit img-orbit2" src="http://lorempixel.com/200/200/"> <img class="img-orbit img-orbit4" src="http://lorempixel.com/200/200/"> </div> </div> </div>

答案 3 :(得分:-1)

awk 'NR>2{sub(/,$/,"")}1' file
[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]}
]