2013-05-25 3 views
0

мне нужна помощь с заглавной первую букву первого слова в предложениях из входного файла input.txt:Заменить первый символ предложения с заглавной буквы

т его мой первый приговор. a Это второе предложение. t шляпа одна третья.

Я хочу, чтобы сделать вывод выглядеть в выходном файле output.txt:

T его мой первый приговор. A и это второе предложение. T шляпа одна третья.

+1

Мы можем помочь вам, если вы покажете, что вы уже пробовали первым. Подсказка: возможно, это связано с использованием 'perl' или' awk'. – Barmar

+0

Добро пожаловать в SO. Пожалуйста, найдите время, чтобы прочитать http://stackoverflow.com/faq – slayedbylucifer

ответ

1

bash version 4 путь:

#!/usr/local/bin/bash 

while IFS="." read -r -a line ; do 
    for ((i=0; i<${#line[@]}; i++)) do 
     if [[ $i > 0 ]]; then 
      temp=$(echo ${line[$i]/ /}) 
      echo -n "${temp^}. " 
     else 
      echo -n "${line[$i]^}. " 
     fi 
    done 
    echo 
done < file 
+0

Спасибо, что это работает, но оно не будет работать с предложениями, начиная с ľ š č ť ž ý á í é ď и т. Д. Любые идеи? – Tommy

+0

@ Tommy 'bash v4' обрабатывает его. Если это не так, ваш 'locale' не настроен для обработки этого. Вероятно, вам нужно, по крайней мере, установить «LC_CTYPE» в вариант «UTF-8». –

3

Попробуйте это:

sed -r "s/(^|\.\s+)./\U&/g" <input.txt >output.txt 
+0

+1. Хороший однострочный. – slayedbylucifer

+0

Спасибо, что очень много работает ... Спасибо ... :) – Tommy

+0

Здравствуйте, я обнаружил, что он не работает со всеми символами UTF8. Это для словацкой системы и предложений, иногда начиная с ľ š č ť ž ý á í é é и т. Д. Я решил решить эту проблему? – Tommy

0

насчет awk путь?

$ awk -F"\. " '{OFS=". "}{for (i=0;i<=NF;i++) {sub(".", substr(toupper($i), 1,1) , $i)}} {print}' output.txt 
This is my first sentence. And this is the second sentence. That one is the third. 
  • -F"\. " устанавливает разделитель полей в . (точка + пробел).
  • {OFS=". "} устанавливает разделитель выходного поля на . (точка + пробел).
  • '{for (i=0;i<=NF;i++) {sub(".", substr(toupper($i), 1,1) , $i)}} петли через каждое поле, заглавные буквы из них. Поскольку первое поле - this is my first sentence, оно просто капитализирует this.
Смежные вопросы