1

我试图找出一种方法来压缩 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

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

4

2 回答 2

2

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

如果这不是一个选项,您只需要咳出一个小 bash 脚本,该脚本基本上会打印其所有参数,并由"先前的参数包围。

于 2012-07-06T20:01:21.380 回答
0

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

例如

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)
于 2012-07-06T23:24:22.343 回答