Если Вы находитесь на Linux затем, можно обычно просто делать
ifconfig
или
iwconfig
получить информацию о Вашем NIC. Для сканирования Вас обычно делают
iwlist wlan0 scan
получить информацию о точках беспроводного доступа в диапазоне. В этом случае Ваш беспроводной интерфейс был уже определен с помощью ifconfig
(или iwconfig
) как wlan0
.
Я закончил тем просто, что использовал sed с каналами для получения оператора, который легок для меня понять:
echo O S D Settings | sed 's/\([A-Z][^ ]\)/_\1/g' | sed 's/ //g' | sed 's/_/ /g'
Все это делает замены пробелы, которые я не хочу с подчеркиванием, и затем удаляет их. Спасибо за все ответы!
Это заботится об именах как A B Chadwick
и A B C D'Souza
Текст такой как A B cde
и A B CDE
не изменяются.
Это использует два временных нулевых символа \x00
для маркировки изменений (на имя) как, он прогрессирует через строку, удаляя пробелы.
:N
и :S
ответвление - к маркировкам (любое имя сделает),
t
и b
команды ветвления.
t
ответвления по успешной замене в предыдущем s/../../
команда.
b
ответвления безусловно.
sed -r ":N # loop per name
/(\<[A-Z]\> )+[A-Z][a-z']/{ # line needs action
s/((\<[A-Z]\> )+)([A-Z][a-z'])/\x00\1\x00\3/ # add \x00 markers
:S # loop per space
s/(\x00[A-Z]+) (\<[A-Z]\>)/\1\2/ # delete a space
t S # any more spaces?
b N # any more names?
}; s/\x00//g" # remove \x00
Это хитро с sed
, но если perl
хорошо, можно сделать это этот путь
echo O S D Settings | perl -p -e 's/(\b[A-Z]) (?=.([^\w]|$))/$1/g'
Это твердо в sed
потому что это не поддерживает предварительные утверждения.
Тесты:
echo O S D | perl -p -e 's/(\b[A-Z]) (?=.([^\w]|$))/$1/g'
echo O S D Settings | perl -p -e 's/(\b[A-Z]) (?=.([^\w]|$))/$1/g'
echo O S D. | perl -p -e 's/(\b[A-Z]) (?=.([^\w]|$))/$1/g'
echo One O DDE T. S Asdf Q R Tee | perl -p -e 's/(\b[A-Z]) (?=.([^\w]|$))/$1/g'
echo O S D\ | perl -p -e 's/([A-Z]) (?=.([^\w]|$))/$1/g'
Если Вы хотите неаккуратное решение с sed
, попробовать
echo O S D Settings | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
Который работает на Ваш образец, но перестанет работать для других случаев.
Тесты:
echo O S D | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
echo O S D Settings | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
echo O S D. | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
echo One O DDE T. S Asdf Q R Tee | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
echo O S D\ | sed -e 's/ \([A-Z]\) \([A-Z] \)/\1\2/g'
Это могло бы работать на Вас:
echo "O S D Settings and B T W and A B C D'Souza too F Y I" |
sed ':a;s/\(\<[[:upper:]]\>\) \(\<[[:upper:]]\>\([^'\'']\|$\)\)/\1\n\2/g;ta;s/\n//g'
OSD Settings and BTW and ABC D'Souza too FYI
Объяснение:
Используйте символ, который не существует в исходной строке для замены пробелов, которые Вы хотите удалить, затем удаляете тот выбранный символ всюду по строке. \n
хороший кандидат, поскольку это не может обычно существовать, потому что это используется sed в качестве разделителя строки.