Как удалить лишние пробелы в переменной HEAD
?
HEAD=" how to remove extra spaces "
Результат:
how to remove extra spaces
Как удалить лишние пробелы в переменной HEAD
?
HEAD=" how to remove extra spaces "
Результат:
how to remove extra spaces
Попробуйте следующее:
echo "$HEAD" | tr -s " "
или, возможно, вы хотите сохранить его в переменной:
NEWHEAD=$(echo "$HEAD" | tr -s " ")
Обновление
Чтобы удалить ведущие и конечные пробелы, сделайте следующее:
NEWHEAD=$(echo "$HEAD" | tr -s " ")
NEWHEAD=${NEWHEAD%% }
NEWHEAD=${NEWHEAD## }
Использование awk:
$ echo "$HEAD" | awk '$1=$1'
how to remove extra spaces
Воспользуйтесь эффектами разделения слов, не ссылающимися на вашу переменную
$ HEAD=" how to remove extra spaces "
$ set -- $HEAD
$ HEAD=$*
$ echo ">>>$HEAD<<<"
>>>how to remove extra spaces<<<
Если вы не хотите использовать позиционные параметры, используйте массив
ary=($HEAD)
HEAD=${ary[@]}
echo "$HEAD"
Один опасный побочный эффект не цитирования заключается в том, что расширение имени файла будет в игре. Поэтому сначала выключите его и снова включите его:
$ set -f
$ set -- $HEAD
$ set +f
Эта лошадь еще не совсем мертва: пусть будет бить ее! *
Другие люди упомянули read
, но так как использование некорректного расширения может вызвать нежелательные расширения, все ответы, использующие его, можно считать более или менее одинаковыми. Вы можете сделать
set -f
read HEAD <<< $HEAD
set +f
или вы могли бы сделать
read -a HEAD <<< "$HEAD"
HEAD="${HEAD[*]}"
$ shopt -s extglob
$ HEAD="${HEAD//+( )/ }" HEAD="${HEAD# }" HEAD="${HEAD% }"
$ printf '"%s"\n' "$HEAD"
"how to remove extra spaces"
* Никаких лошадей на самом деле не пострадали - это была всего лишь метафора для получения шести + разнообразных ответов на простой вопрос.
Вот как бы я сделал это с 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 заменяет любые группы из более чем одного пространства на единое пространство, а второе выражение удаляет любые конечные или ведущие пробелы.
Попробуйте следующее:
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')
echo -e " abc \t def "|column -t|tr -s " "
column -t
будет:
tr -s " "
несколько пробелов в один пробел
Кстати, чтобы увидеть весь вывод, вы можете использовать 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$
Переменная echo без кавычек делает то, что вы хотите:
HEAD=" how to remove extra spaces "
echo $HEAD
вывод: how to remove extra spaces
Я бы использовал tr для удаления лишних пробелов и xargs для обрезки спереди и сзади.
TEXT=" This is some text "
echo $(echo $TEXT | tr -s " " | xargs)
# [...]$ This is some text