我有一些如下数据
"brand": "Some brand name ", "otherbrand": "Something else ",
"brand":"Some third way"
尽管这样有点不太结构化,但是有一个结构是相同的,那就是周围有重复出现的“品牌”实例:其后的值有不方便的空格。
我需要做的是规范化空格,并在值中修剪它,以便
"brand": "Some brand name "
变成
"brand": "Some brand name"
和
"brand":"Some third way"
变成
"brand":"Some third way"
文件的大小是
我想知道如何使用 Sed 来做到这一点,因为我想我将不得不在这里和那里对数据进行这种微小的修复,并且我想要一种只使用终端中的一行来临时完成它的方法。
答案1
这应该有效:
sed 's/ *"/"/g;s/ */ /g'
第一部分删除引号内尾随的所有空格,第二部分将多个空格缩减为一个空格:
$ echo "Before:"; cat $TEMP/test.txt; echo "After:";sed 's/ *"/"/g;s/ */ /g' $TEMP/test.txt
Before:
"brand": "Some brand name ", "otherbrand": "Something else ",
"brand":"Some third way"
After:
"brand":"Some brand name","otherbrand":"Something else",
"brand":"Some third way"
答案2
sed ':in
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{2,\}/\1 /
t in
:edge
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{1,\}"/\1"/
s/^\(\([^"]*"[^"]*"\)*[^"]*"\) \{1,\}/\1/
t edge
' YourFile
--posix -e
适用于 gnu sed 的POSIX 版本- 递归删除引号字符串内的多个空格(不要触碰它们之间,只需进行少量修改即可完成)
- 递归删除引号字符串内的边缘空格(一个用于开始,一个用于结束)