Поскольку есть несколько пробелов, которые вы хотите использовать
${var%%[[:space:]]*}
#...^^
для удаления самой длинной завершающей подстроки, начинающейся с пробела
С помощью всего лишь одного %
вы удаляете кратчайшую последовательность пробелов, за которыми следует ноль или более символов, что является последним пробелом в строке.
$ echo ">$var<"; echo ">${var%[[:space:]]*}<"; echo ">${var%%[[:space:]]*}<"
>2492 some string continues here <
>2492 some string continues here <
>2492<
Если вы просто ищете первое слово , вы можете сделать это:
read -r word rest_of_string <<<"$var"
echo "I have: $word"
Это позаботится о начальных пробелах, если вы не изменяли переменную IFS.
Вы можете заменить пробелы символами новой строки, сжимая каждый повтор в одну замену (-s
может не понадобиться, в зависимости от структуры пробелов в вашем файле):
tr -d '[:punct:]' < file.txt | tr -s '[:space:]' '\n'