Можно ли написать сценарий, который добавляет "#" к любой строке файла, начинающейся с заглавной буквы?

Чтобы упростить школьный проект, я хочу добавить разделитель к каждой строке, начинающейся с заглавной буквы, с помощью скрипта bash. Может ли кто-нибудь помочь мне? Я пробовал читать файл построчно в тандеме с командой case, но это не работает. Я действительно не понимаю, что делаю. Вот что у меня есть на данный момент: (Я новичок в написании сценариев, не ругайте меня)

#!/bin/bash
input=/home/user/file
while IFS= read -r var
do
        case [A-Z]
                sed 's/^/#/' file
done
0
30.06.2020, 10:59
1 ответ

Вы не используете циклы оболочки для обработки текста . Обработка текста выполняется инструментами обработки текста, которые обрабатывают ввод по одной строке за раз :

.
#! /bin/sh -
input=/home/user/file
sed 's/^[[:upper:]]/#&/' < "$input"

Будет вставлен #перед заглавной буквой в начале(^)каждой строки $input.

Здесь заглавная буква определяется локалью. Он будет включать английские буквы ABCDEFGHIJKLMNOPQRSTUVWXYZ и, возможно, такие вещи, как Á, Ź или Π, если они присутствуют.

Если вы хотите ограничиться только ABCDEFGHIJKLMNOPQRSTUVWXYZ, вы должны написать:

sed 's/^[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/#&/' < "$input"

[A-Z]сам по себе может соответствовать чему угодно в зависимости от локали. Вы также найдете системы, в которых это соответствует abcdefghijklmnopqrstuvwxy(, а не z). В большинстве систем он будет соответствовать Á, но не Ź, если присутствует в шармапе локали. Он может даже сопоставлять последовательности символов (многосимвольные -элементы сопоставления символов, такие как венгерскийDdzs).

2
18.03.2021, 23:23

Теги

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