Книга: Искусство программирования на языке сценариев командной оболочки
Пример 9-10. Вставка пустых строк между параграфами в текстовом файле
Пример 9-10. Вставка пустых строк между параграфами в текстовом файле
#!/bin/bash
# paragraph-space.sh
# Вставка пустых строк между параграфами в текстовом файле.
# Порядок использования: $0 <FILENAME
MINLEN=45 # Возможно потребуется изменить это значение.
# Строки, содержащие количество символов меньшее, чем $MINLEN
#+ принимаются за последнюю строку параграфа.
while read line # Построчное чтение файла от начала до конца...
do
echo "$line" # Вывод строки.
len=${#line}
if [ "$len" -lt "$MINLEN" ]
then echo # Добавление пустой строки после последней строки параграфа.
fi
done
exit 0
Длина подстроки в строке (подсчет совпадающих символов ведется с начала строки)
expr match "$string" '$substring'
где $substring -- регулярное выражение.
expr "$string" : '$substring'
где $substring -- регулярное выражение.
stringZ=abcABC123ABCabc
# |------|
echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
Index
expr index $string $substring
Номер позиции первого совпадения в $string c первым символом в $substring.
stringZ=abcABC123ABCabc
echo `expr index "$stringZ" C12` # 6
# позиция символа C.
echo `expr index "$stringZ" 1c` # 3
# символ 'c' (в #3 позиции) совпал раньше, чем '1'.
Эта функция довольно близка к функции strchr() в языке C.
Извлечение подстроки
${string:position}
Извлекает подстроку из $string, начиная с позиции $position.
Если строка $string -- "*" или "@", то извлекается позиционный параметр (аргумент)[ 21 ], с номером $position.
${string:position:length}
Извлекает $length символов из $string, начиная с позиции $position.
stringZ=abcABC123ABCabc
# 0123456789.....
# Индексация начинается с 0.
echo ${stringZ:0} # abcABC123ABCabc
echo ${stringZ:1} # bcABC123ABCabc
echo ${stringZ:7} # 23ABCabc
echo ${stringZ:7:3} # 23A
# Извлекает 3 символа.
# Возможна ли индексация с "правой" стороны строки?
echo ${stringZ:-4} # abcABC123ABCabc
# По-умолчанию выводится полная строка.
# Однако . . .
echo ${stringZ:(-4)} # Cabc
echo ${stringZ: -4} # Cabc
# Теперь выводится правильно.
# Круглые скобки или дополнительный пробел "экранируют" параметр позиции.
# Спасибо Dan Jacobson, за разъяснения.
Если $string -- "*" или "@", то извлекается до $length позиционных параметров (аргументов), начиная с $position.
echo ${*:2} # Вывод 2-го и последующих аргументов.
echo ${@:2} # То же самое.
echo ${*:2:3} # Вывод 3-х аргументов, начиная со 2-го.
expr substr $string $position $length
Извлекает $length символов из $string, начиная с позиции $position.
stringZ=abcABC123ABCabc
# 123456789......
# Индексация начинается с 1.
echo `expr substr $stringZ 1 2` # ab
echo `expr substr $stringZ 4 3` # ABC
expr match "$string" '($substring)'
Находит и извлекает первое совпадение $substring в $string, где $substring -- это регулярное выражение.
expr "$string" : '($substring)'
Находит и извлекает первое совпадение $substring в $string, где $substring -- это регулярное выражение.
stringZ=abcABC123ABCabc
# =======
echo `expr match "$stringZ" '(.[b-c]*[A-Z]..[0-9])'` # abcABC1
echo `expr "$stringZ" : '(.[b-c]*[A-Z]..[0-9])'` # abcABC1
echo `expr "$stringZ" : '(.......)'` # abcABC1
# Все вышеприведенные операции дают один и тот же результат.
expr match "$string" '.*($substring)'
Находит и извлекает первое совпадение $substring в $string, где $substring -- это регулярное выражение. Поиск начинается с конца $string.
expr "$string" : '.*($substring)'
Находит и извлекает первое совпадение $substring в $string, где $substring -- это регулярное выражение. Поиск начинается с конца $string.
stringZ=abcABC123ABCabc
# ======
echo `expr match "$stringZ" '.*([A-C][A-C][A-C][a-c]*)'` # ABCabc
echo `expr "$stringZ" : '.*(......)'` # ABCabc
Удаление части строки
${string#substring}
Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки
${string##substring}
Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки
stringZ=abcABC123ABCabc
# |----|
# |----------|
echo ${stringZ#a*C} # 123ABCabc
# Удаление самой короткой подстроки.
echo ${stringZ##a*C} # abc
# Удаление самой длинной подстроки.
${string%substring}
Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки
${string%%substring}
Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки
stringZ=abcABC123ABCabc
# ||
# |------------|
echo ${stringZ%b*c} # abcABC123ABCa
# Удаляется самое короткое совпадение. Поиск ведется с конца $stringZ.
echo ${stringZ%%b*c} # a
# Удаляется самое длинное совпадение. Поиск ведется с конца $stringZ.
- Пример установочного скрипта
- Инструмент командной строки gbak
- Пример из практики
- Миграция между различными версиями InterBase
- 3.4. Отношения между классами
- Инструмент командной строки gfix
- Мост между физической и логической структурой базы данных
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Как выделить строку, столбец и ячейки
- Удобная операция объединения строк
- Работа со строками
- Примеры получения статистики