Почему «perl -F» работает не так, как «perl -F<пробел>»

Если полезно. У меня есть bluetooth-наушники, и мне нужно было настроить для них переключение между гарнитурой и профилями a2dp. Решено добавлением этих функций:

talk() {
  card=$(pacmd list-cards | grep 'name:' | grep bluez | cut -d: -f2 | sed -e 's/[< >]//g')
  pacmd set-card-profile $card headset_head_unit
}

mus() {
  card=$(pacmd list-cards | grep 'name:' | grep bluez | cut -d: -f2 | sed -e 's/[< >]//g')
  pacmd set-card-profile $card a2dp_sink
}
0
08.12.2020, 15:49
1 ответ

Изman perlrun:

-Fpattern [...] You can't use literal whitespace or NUL characters in the pattern.

Но вы можете использовать \040:

$ (echo 'a  b';echo 'b  a';echo 'c a b') |   perl -a '-F\040' -pe 'BEGIN{$last="---\n";}{local$_=$F[1];if(($last)ne$_){print"---\n";$last=$_;}}'
---
a  b
---
b  a
c a b

К сожалению, кажется, что это интерпретируется как один или несколько пробелов (, что также является значением по умолчанию для -F ), что мне не нужно.

\sработает лучше, но также соответствует \t:

$ (printf 'a\t b\n';echo 'b  a';echo 'c a b') |   perl -a '-F\s' -pe 'BEGIN{$last="---\n";}{local$_=$F[1];if(($last)ne$_){print"---\n";$last=$_;}}'
---
a        b
b  a
---
c a b
1
18.03.2021, 22:44

Теги

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