Использование tr для размещения слов файла по порядку, чтобы каждая строка содержала 1 слово в порядке появления и без пробелов

Поскольку есть несколько пробелов, которые вы хотите использовать

${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.

0
23.02.2020, 04:45
1 ответ

Вы можете заменить пробелы символами новой строки, сжимая каждый повтор в одну замену (-sможет не понадобиться, в зависимости от структуры пробелов в вашем файле):

tr -d '[:punct:]' < file.txt  | tr -s '[:space:]' '\n'
0
28.04.2021, 23:22

Теги

Похожие вопросы