Как разделить строку на слова, разделенные одними или несколькими пробелами в ударе? [дубликат]

43
задан Ciro Santilli 新疆改造中心法轮功六四事件 7 September 2015 в 11:59
поделиться

6 ответов

s='foo bar baz'
a=( $s )
echo ${a[0]}
echo ${a[1]}
...
131
ответ дан 26 November 2019 в 22:22
поделиться

Это зависит от того, что вы имеете в виду под сплит . Если вы хотите провести итерацию по словам в строке, которая находится в переменной, вы можете просто провести итерацию. Например, скажем, переменная строка - это строка. Тогда можно сделать так:

for word in $line; do echo $word; done

Это выведет:

this
is
a
line

для ... в $var разбивает $var, используя значения в $IFS, значение по умолчанию которого означает "разделить пробелы и новые строки".

Если вы хотите читать строки пользователя или файла, вы можете сделать что-нибудь вроде:

cat $filename | while read line
do
    echo "Processing new line" >/dev/tty
    for word in $line
    do
        echo $word
    done
done

Для чего-нибудь еще, вам нужно быть более откровенным и определить ваш вопрос более подробно.

Примечание: Редактировано для удаления башизма, но я все еще сохранил cat $filename | ..., потому что он мне нравится больше, чем перенаправление.

.
30
ответ дан 26 November 2019 в 22:22
поделиться

Если у вас уже есть строка текста в переменной $LINE, то вы должны быть в состоянии сказать

for L in $LINE; do
   echo $L;
done
3
ответ дан 26 November 2019 в 22:22
поделиться
$ line="these are words"
$ ll=($line)
$ declare -p ll  # dump the array
declare -a ll='([0]="these" [1]="are" [2]="words")'
$ for w in ${ll[@]}; do echo $w; done
these
are
words
10
ответ дан 26 November 2019 в 22:22
поделиться

Вариант -a считывание позволит разделить строку, считываемую символами, содержащимися в $IFS.

.
5
ответ дан 26 November 2019 в 22:22
поделиться

сделайте это

while read -r line
do
  set -- $line
  echo "$1 $2"
done <"file"

$1, $2 и т.д. будут вашими 1-ым и 2-ым разделенными "полями". используйте $@, чтобы получить все значения... используйте $#, чтобы получить длину "полей".

10
ответ дан 26 November 2019 в 22:22
поделиться
Другие вопросы по тегам:

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