如何制作 sed 命令来修剪字符串末尾的空格或规范化字符串中的空格?

如何制作 sed 命令来修剪字符串末尾的空格或规范化字符串中的空格?

我有一些如下数据

"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 版本
  • 递归删除引号字符串内的多个空格(不要触碰它们之间,只需进行少量修改即可完成)
  • 递归删除引号字符串内的边缘空格(一个用于开始,一个用于结束)

相关内容