我正试图找出一种方法来挤压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
挤压引号内的空格 - 这是不可取的
答案 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)