我正在使用sed '$s/,$//'
尝试删除数组最后一行末尾的逗号,该数组的行上有开括号和右括号(如下所示)。此命令sed '$s/,$//'
未按预期工作。
如果我执行sed '$s/]$//'
它会删除关闭的数组括号,所以我知道我在正确的轨道上......
[
{"foo":"foofoo","fuzz":["fee, fi, fo, fum"]},
{"bar":"barbar","fuzz":["blah", "blah"]},
]
这是针对bash脚本的。请不要提供使用perl的答案。
答案 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"]}
]