Чтобы упростить школьный проект, я хочу добавить разделитель к каждой строке, начинающейся с заглавной буквы, с помощью скрипта bash. Может ли кто-нибудь помочь мне? Я пробовал читать файл построчно в тандеме с командой case, но это не работает. Я действительно не понимаю, что делаю. Вот что у меня есть на данный момент: (Я новичок в написании сценариев, не ругайте меня)
#!/bin/bash
input=/home/user/file
while IFS= read -r var
do
case [A-Z]
sed 's/^/#/' file
done
Вы не используете циклы оболочки для обработки текста . Обработка текста выполняется инструментами обработки текста, которые обрабатывают ввод по одной строке за раз :
.#! /bin/sh -
input=/home/user/file
sed 's/^[[:upper:]]/#&/' < "$input"
Будет вставлен #
перед заглавной буквой в начале(^
)каждой строки $input
.
Здесь заглавная буква определяется локалью. Он будет включать английские буквы ABCDEFGHIJKLMNOPQRSTUVWXYZ и, возможно, такие вещи, как Á, Ź или Π, если они присутствуют.
Если вы хотите ограничиться только ABCDEFGHIJKLMNOPQRSTUVWXYZ, вы должны написать:
sed 's/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/#&/' < "$input"
[A-Z]
сам по себе может соответствовать чему угодно в зависимости от локали. Вы также найдете системы, в которых это соответствует abcdefghijklmnopqrstuvwxy
(, а не z
). В большинстве систем он будет соответствовать Á, но не Ź, если присутствует в шармапе локали. Он может даже сопоставлять последовательности символов (многосимвольные -элементы сопоставления символов, такие как венгерскийDdzs
).