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 に答える