我正在尝试从数据文件中删除单引号后面/前面的所有空格。但是我没有用以下方案捕捉所有内容。
输入
{'_id':' BE3523 ', 'time':' 18:20 ', 'number':' BE3523 ', 'destination':' Bordeaux ', 'status': ' Scheduled '}
sed命令我正在运行......
sed -i.bak 's/['\'' ]\{2\}/'\''/g' input.json
输出
{'_id':'BE3523','time':'18:20','number':'BE3523','destination':'Bordeaux','status':' Scheduled'}
请注意'_Scheduled
之间的空格仍然存在,但每个其他空格都已删除。我必须再次运行sed命令以摆脱下面的最后空间
{'_id':'BE3523','time':'18:20','number':'BE3523','destination':'Bordeaux','status':'Scheduled'}
任何想法,我做错了,为什么这个空间一直存在?
答案 0 :(得分:2)
首先,您的输入文件input.json
不是有效的JSON,因为字符串使用单引号而不是双引号。
其次,你的sed
表达式比你(可能)期望的更多(同时更少):它不仅会替换'
(空格,引用)或{{1} (引用,空格)'
,'
(引用,引用)或''
(空格,空格)。原因是你没有使用特定的序列(如其他答案所提议的),或者是
'
和'
(引用和空格)之间的排他性。
要实现“压缩”效果,我猜测你要去:在单引号之后删除或之前的多个空格字符,你可以使用:
仅剥离空格(不包括换行符/制表符):
sed "s/[[:space:]]*'[[:space:]]*/'/g" file
在您的样本输入上,两者都会产生:
sed "s/ *' */'/g" file
我不确定为什么要通过这种方式剥离前导/尾随空格来修改值。
答案 1 :(得分:1)
您可以尝试使用单引号替换所有案例,例如
sed -i.bak "s/\( ' \|' \| '\)/'/g" input.json