挤压bash中没有引号的空格

时间:2012-07-06 19:55:47

标签: regex bash quotes

我正试图找出一种方法来挤压bash中不是引号(包括双引号和单引号)的空格。我会使用tr -s但它不会削减它。我想在文本文件(foo.txt)中包含以下行:

    "      not  squeezed      "     squeeze     this     part

变成:

    "      not  squeezed      " squeeze this part

当然,嵌套的单个,双重,转义引号会变得更复杂,所以我想知道是否已经为此编写了某种命令?

编辑:

如果我尝试:

    cat foo.txt | tr -s 

我会得到输出:

    " not squeezed " squeeze this part

挤压引号内的空格 - 这是不可取的

2 个答案:

答案 0 :(得分:2)

是。它被称为echo ...如果您不需要打印双引号。如果您这样做,请首先使用"转义所有未转义的\和所有\

如果这不是一个选项,你必须咳出一个小的bash脚本,该脚本基本上打印所有参数,由"包围,具体取决于以前的参数。

答案 1 :(得分:0)

你想要的是上下文敏感,所以你必须自己解析它。

e.g。

cat foo.txt | (
st=0; lc=""; od -v -t o1  | cut -b 9- |
while read line
 do
  for t in $line
   do
    if [[ $st == 1 ]] ; then
     printf \\$t
    else
     if [[ "$t" != "040" ]] ; then
      printf \\$t
     else
      if [[ "$lc" != "040" ]] ; then
       printf \\$t
      fi
     fi
    fi
    if [[ "$t" == "042" ]] ; then
     st=$((1-$st))
    fi
    lc="$t"
   done
 done)