33

variable の余分なスペースを削除するにはHEAD?

HEAD="    how to  remove    extra        spaces                     "

結果:

how to remove extra spaces
4

10 に答える 10

37

これを試して:

echo "$HEAD" | tr -s " "

または、変数に保存したい場合もあります。

NEWHEAD=$(echo "$HEAD" | tr -s " ")

アップデート

先頭と末尾の空白を削除するには、次のようにします。

NEWHEAD=$(echo "$HEAD" | tr -s " ")
NEWHEAD=${NEWHEAD%% }
NEWHEAD=${NEWHEAD## }
于 2012-10-26T18:25:37.177 に答える
29

awk の使用:

$ echo "$HEAD" | awk '$1=$1'
how to remove extra spaces
于 2012-11-27T11:49:08.857 に答える
13

変数を引用しないことによる単語分割効果を利用する

$ HEAD="    how to  remove    extra        spaces                     "
$ set -- $HEAD
$ HEAD=$*
$ echo ">>>$HEAD<<<"
>>>how to remove extra spaces<<<

位置パラメータを使用したくない場合は、配列を使用してください

ary=($HEAD)
HEAD=${ary[@]}
echo "$HEAD"

引用符で囲まないことの危険な副作用の1つは、ファイル名の拡張が機能することです。したがって、最初にオフにし、後で再度有効にします。

$ set -f
$ set -- $HEAD
$ set +f
于 2012-10-26T20:22:15.207 に答える
9

この馬はまだ完全に死んでいません: 勝ち続けましょう! *

配列に読み込む

他の人が言及readしていますが、引用されていない展開を使用すると望ましくない展開が発生する可能性があるため、それを使用するすべての回答は多かれ少なかれ同じと見なすことができます。あなたができる

set -f
read HEAD <<< $HEAD
set +f

またはあなたができる

read -rd '' -a HEAD <<< "$HEAD"  # Assuming the default IFS
HEAD="${HEAD[*]}"

パラメータ拡張による拡張グロビング

$ shopt -s extglob
$ HEAD="${HEAD//+( )/ }" HEAD="${HEAD# }" HEAD="${HEAD% }"
$ printf '"%s"\n' "$HEAD"
"how to remove extra spaces"

*実際に危害を加えられた馬はいません。これは、単純な質問に対して 6 つ以上の多様な回答を得るための比喩にすぎません。

于 2015-05-06T03:30:29.167 に答える
6

sedでそれを行う方法は次のとおりです。

string='    how to  remove    extra        spaces                     '
echo "$string" | sed -e 's/  */ /g' -e 's/^ *\(.*\) *$/\1/'

=> how to remove extra spaces   # (no spaces at beginning or end)

最初の sed 式は、複数のスペースのグループを 1 つのスペースに置き換え、2 番目の式は末尾または先頭のスペースをすべて削除します。

于 2012-10-26T19:50:21.810 に答える
2

echo -e " abc \t def "|column -t|tr -s " "

column -t意思:

  1. 行頭と行末のスペースを削除する
  2. タブをスペースに変換する

tr -s " "複数のスペースを 1 つのスペースに絞り込みます


ところで、使用できる出力全体を表示するには、cat - -Aタブと EOL を含むすべての空白文字を表示します。

echo -e " abc \t def "|cat - -A

出力:abc ^I def $

echo -e " abc \t def "|column -t|tr -s " "|cat - -A

出力: abc def$

于 2016-06-13T17:59:50.307 に答える
1

これを試してください:

echo '    how to  remove    extra        spaces                     ' | sed 's/^ *//g' | sed 's/$ *//g' | sed 's/   */ /g'

また

HEAD="    how to  remove    extra        spaces                     "
HEAD=$(echo "$HEAD" | sed 's/^ *//g' | sed 's/$ *//g' | sed 's/   */ /g')
于 2012-10-26T19:44:35.470 に答える