Вы можете «обрезать» текст, то есть удалить все пробелы в начале и конце. Если все, что осталось, это пустая строка, то вводится только пробел (или ничего).
NSString *rawString = [textField text];
NSCharacterSet *whitespace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
NSString *trimmed = [rawString stringByTrimmingCharactersInSet:whitespace];
if ([trimmed length] == 0) {
// Text was empty or only whitespace.
}
Если вы хотите проверить, есть ли какие-либо пробелы (где-либо в тексте), вы можете сделать это следующим образом:
NSRange range = [rawString rangeOfCharacterFromSet:whitespace];
if (range.location != NSNotFound) {
// There is whitespace.
}
Если вы хотите запретить пользователю вводить пробелы в все, см. решение @ Hanon.
Невозможно сделать это, используя только sed. Вам нужно будет одновременно использовать как минимум утилиту find:
find . -type f -exec sed -i.bak "s/foo/bar/g" {} \;
Эта команда создаст файл .bak
для каждого измененного файла.
Примечания:
-i [ Аргумент 1115645] для команды sed
является расширением GNU, поэтому, если вы запускаете эту команду с BSD sed
, вам нужно будет перенаправить вывод в новый файл, а затем переименовать его.
find
не реализует аргумент -exec
в старых модулях UNIX, поэтому вам нужно будет использовать | xargs
вместо этого. Что касается переносимости, я не полагаюсь на особенности sed, специфичные для Linux или BSD. Вместо этого я использую сценарий перезаписи
из книги Кернигана и Пайка о среде программирования Unix.
Затем команда
find /the/folder -type f -exec overwrite '{}' sed 's/old/new/g' {} ';'
И сценарий перезаписи
(который я использую во всем place) is
#!/bin/sh
# overwrite: copy standard input to output after EOF
# (final version)
# set -x
case $# in
0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2
esac
file=$1; shift
new=/tmp/$$.new; old=/tmp/$$.old
trap 'rm -f $new; exit 1' 1 2 15 # clean up files
if "$@" >$new # collect input
then
cp $file $old # save original file
trap 'trap "" 1 2 15; cp $old $file # ignore signals
rm -f $new $old; exit 1' 1 2 15 # during restore
cp $new $file
else
echo "overwrite: $1 failed, $file unchanged" 1>&2
exit 1
fi
rm -f $new $old
Идея состоит в том, что он перезаписывает файл только в случае успешного выполнения команды. Полезно в find
, а также там, где вы не хотели бы использовать
sed 's/old/new/g' file > file # THIS CODE DOES NOT WORK
, потому что оболочка усекает файл до того, как sed
сможет его прочитать.
Могу я предложить (после резервного копирования ваших файлов):
find /the/folder -type f -exec sed -ibak 's/old/new/g' {} ';'
Можно попробовать мой сценарий массового поиска / замены Perl .