Использованиеsed
:
sed -e 'N;s/\n/\t/' in.txt
объединение каждых двух строк вместе с одной табуляцией между
Используйте функцию \U
в GNU sed.
s/^\([a-z]\)/\U\1/
так что это захватывает один символ в начале строки, если он в нижнем регистре, и в верхнем регистре.
Поскольку \U оставляет в покое другие вещи, это можно упростить до
s/\(.\)/\U\1/
, так как .
будет соответствовать первому символу (, если он есть )в строке.
tr
не поможет вам здесь, так как верхний регистр -с tr
превратит все символы в верхний регистр -(tr
имеет только символ -в -a -контекст времени, поэтому он никогда не узнает о «начале строки» или «начале слова» ).
sed
мог бы это сделать, если бы вы использовали GNU sed
. Однако способ, который вы показываете, заменит первый символ верхнего регистра -(s )буквальным текстом [A-Z]
.
Поскольку этот вопрос помечен тегом posix , вот стандартное -совместимое 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:]]
, чтобы заменить первый не -пробел в строке (это сохранит любой отступ ).
Стандарт POSIX:
h
s/(.).*/\1/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
G
s/(.)\n.?(.*)/\1\2/
Если вы хотите использовать заглавные буквы для первого не-пустого символа в строке (если это буква ), используйте этот вариант ответа Кусалананды:
awk '{ ch = substr($1,1,1); uch = toupper(ch); if (ch != uch) sub(ch, uch); print }'
Обратите внимание, что это не забивает пробелы.
Если вы хотите сделать первую букву в строке заглавной, используйте этот вариант ответа икара:
sed 's/\([a-z]\)/\U\1/'
т. е. опустить ^
.