Если какая-либо первая в строке английская буква написана строчными буквами, сделайте ее прописной.

Использованиеsed:

sed -e 'N;s/\n/\t/' in.txt

объединение каждых двух строк вместе с одной табуляцией между

0
12.12.2019, 19:19
4 ответа

Используйте функцию \Uв GNU sed.

 s/^\([a-z]\)/\U\1/

так что это захватывает один символ в начале строки, если он в нижнем регистре, и в верхнем регистре.

Поскольку \U оставляет в покое другие вещи, это можно упростить до

s/\(.\)/\U\1/

, так как .будет соответствовать первому символу (, если он есть )в строке.

10
28.01.2020, 02:13

trне поможет вам здесь, так как верхний регистр -с trпревратит все символы в верхний регистр -(trимеет только символ -в -a -контекст времени, поэтому он никогда не узнает о «начале строки» или «начале слова» ).

sedмог бы это сделать, если бы вы использовали GNU sed. Однако способ, который вы показываете, заменит первый символ верхнего регистра -(s )буквальным текстом [A-Z].


Поскольку этот вопрос помечен тегом , вот стандартное -совместимое awkрешение, в котором первый символ в любой строке будет просто заглавным:

awk '{ ch = toupper(substr($0,1,1)); sub(".", ""); $0 = ch $0; print }' file

Команда awkизвлекает первый символ в строке с помощью substr(). Затем он вводит его в верхний регистр и присваивает переменной ch. Затем первый символ в строке удаляется с помощью sub(), а заглавная буква chдобавляется к строке. Затем строка печатается.

Проверка:

$ cat file
Apple
orange
grapefruit
Mango
$ awk '{ ch = toupper(substr($0,1,1)); sub(".", ""); $0 = ch $0; print }' file
Apple
Orange
Grapefruit
Mango

Если есть некоторый отступ данных (т. е. есть пробелы в начале строки ), то вместо этого используйте

awk '{ ch = toupper(substr($1,1,1)); sub(".", "", $1); $1 = ch $1; print }' file

(однако это удалит отступ ).


Если вам удобно использовать для этого Perl, в следующем примере первый символ в каждой строке будет -заглавным, подобно тому, как это делает первая awkпрограмма выше.

perl -pe 'substr($_,0,1,uc(substr($_,0,1)))' file

при использовании

perl -pe 's/^./\U$&/' file

будет короче и больше похоже на Perl -.

Замените ^.в этом выражении на [^[:blank:]], чтобы заменить первый не -пробел в строке (это сохранит любой отступ ).

4
28.01.2020, 02:13

Стандарт POSIX:

h
s/(.).*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/(.)\n.?(.*)/\1\2/
0
28.01.2020, 02:13

Если вы хотите использовать заглавные буквы для первого не-пустого символа в строке (если это буква ), используйте этот вариант ответа Кусалананды:

awk '{ ch = substr($1,1,1); uch = toupper(ch); if (ch != uch) sub(ch, uch); print }'

Обратите внимание, что это не забивает пробелы.


Если вы хотите сделать первую букву в строке заглавной, используйте этот вариант ответа икара:

sed 's/\([a-z]\)/\U\1/'

т. е. опустить ^.

1
04.03.2020, 07:34

Теги

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