我尝试使用sed搜索并删除第二行到最后一行的逗号,
。
这就是我现在所拥有的:
}
"user-account-id": "John",
"user-account-number": "v1001",
"user-account-app": "v10.0.0",
"user-account-dbase": "v10.1.0",
}
我希望最终的结果是这样的:
}
"user-account-id": "John",
"user-account-number": "v1001",
"user-account-app": "v10.0.0",
"user-account-dbase": "v10.1.0"
}
我以为我在贴出这篇文章一个小时后就找到了答案,但我错了,它不起作用。
使用以下任何组合进行试运行都不起作用:
sed '2,$ s/,$//' filename
sed '2,$ s/,//' filename
sed '2,$ s/,//g' filename
sed '2,$s/,$//' filename
sed '2,$s/,//' filename
sed '2,$s/,//g' filename
使用以下任何组合进行实际删除都不起作用:
sed -i '2,$ s/,$//' filename
sed -i '2,$ s/,//' filename
sed -i '2,$ s/,//g' filename
sed -i '2,$s/,$//' filename
sed -i '2,$s/,//' filename
sed -i '2,$s/,//g' filename
我以为用'2,$
运行sed
只会修改文件中的“倒数第二行”。
输出将删除每行中的逗号,这没有意义:
}
"user-account-id": "John"
"user-account-number": "v1001"
"user-account-app": "v10.0.0"
"user-account-dbase": "v10.1.0"
}
3条答案
按热度按时间7vux5j2d1#
2,$
是一个 range,从第二行开始,到最后一行结束(所以除了第一行之外的所有行)。在sed
中,修改倒数第二行是困难的,例如Replace the "pattern" on second-to-last line of a file。但是在您的情况下,GNU
sed
有一个更简单的解决方案:将整个文件视为一个字符串,并删除文件末尾的最后一个逗号和后面的
}
(忽略任何空格,甚至换行符)。如果你知道最后一个
rnmwe5a22#
另一个策略:反转文件,删除 * 第一次 * 看到文件时的尾随逗号,然后重新反转文件:
nnt7mjpx3#
这可能对你有用(GNU sed):
在整个文件中打开一个两行窗口,当遇到最后一行时,删除第一行
,
。