通过 shell 脚本删除文件中的空格

Remove spaces in file through shell script

我有一个 psv 文件,其中包含如下记录:

  Apple    | Banana     | I want to eat banana        | Carrot

如您所见,所有列都包含前导空格和尾随空格 我使用了这个命令:

sed -i -r 's/\s+//g;/^$/d' fileName

删除空格和空行。之后我得到的结果是:

Apple|Banana|Iwanttoeatbanana|Carrot

我的预期结果有点像这样:

Apple|Banana|I want to eat banana|Carrot

请帮助我使用 shell 脚本获得所需的结果。

提前致谢!

你可以使用这个 sed:

sed -E 's/^[[:blank:]]+|[[:blank:]]*(\|)[[:blank:]]*|[[:blank:]]+$//g' file

Apple|Banana|I want to eat banana|Carrot

解释:

  • ^[[:blank:]]+: 开始后匹配1个或多个空格
  • |: 或
  • [[:blank:]]*(\|)[[:blank:]]*:在|前后匹配0个或多个空格并捕获组#1
  • 中的|
  • |: 或
  • [[:blank:]]+$: 匹配 end
  • 前的 1 个或多个空格
  • Replacement is a \1` 将第 1 组的捕获值替换为

一个awk解决方案:

awk -F '[[:blank:]]*\|[[:blank:]]*' -v OFS='|' '{
   gsub(/^[[:blank:]]+|[[:blank:]]+$/, ""); =} 1' file

Apple|Banana|I want to eat banana|Carrot