2012-04-04 4 views
7

Ich muss den ersten Buchstaben jeder Zeile in einer Datei in Großbuchstaben, z.Ändern des ersten Buchstabens jeder Zeile in einer Datei in Großbuchstaben

the bear ate the fish. 
the river was too fast. 

würde:

The bear ate the fish. 
The river was too fast. 
  • Das Dokument einige Sonderzeichen enthält: a, a, a, a, ǎ, a, b, c, d, e, e, e, ,,,, ē, f, g, h, ich, ich,,, ǐ, ī, j, k, l, m, n, o, o, ó,,, ǒ, ō, p, q, r, s, t, u, u, ú, ù, ǔ, ü, ǘ, ǜ, ǚ, ǖ, ū, v, w, x, y und z.
  • Die Großbuchstaben dieser Buchstaben sind: A, A, A, A, A, B, C, D, E, E, E, A, A, A, F, G, H, I, I ,,, Ì, Ǐ, Ī, J, K, L, M, N, O, O,,, Ò, Ǒ, Ō, P, Q, R, S, T, U, U, Ú, Ù, Ǔ , 0, Ǘ, Ǜ, Ǚ, Ǖ, Ū, V, W, X, Y und Z.

Wie kann ich den ersten Buchstaben jeder Zeile in der Datei in Großbuchstaben ändern?

+1

denke ich, was Ingenieur gemeint war, was Programmiersprache. PHP usw. –

+0

BASH wäre bevorzugt. – Village

+0

Die Frage ist mit 'bash' getaggt ... –

Antwort

11

Verwendung sed:

sed 's/^\(.\)/\U\1/' yourfile > convertedfile 

Kleine Erklärung:

  • die ^ stellt den Anfang einer Zeile.
  • . jedes Zeichen
  • \U wandelt
  • \(... \) einen Abschnitt in Großbuchstaben angibt später Bezug genommen werden (wie \1 in diesem Fall); Klammern sind hier zu entkommen.

Sie nicht versuchen, die Ausgabe auf die gleiche Datei in einem Befehl zu umleiten (d > yourfile), wie Sie Ihre Daten verlieren. Wenn Sie in der gleichen Datei ersetzen möchten, dann schauen Sie sich die Antwort von joelparkerhenderson an.

2

Um die Datei anstelle zu ändern:

sed -i -e 's/^\(.\)/\U\1/' file.txt 
+0

Funktioniert! Aber auch, warum bekomme ich auch den Fehler (Warnung ??): sed: kann nicht lesen: Keine solche Datei oder Verzeichnis? – bikashg

+0

@bikashg Sie haben den Fehler, weil es einen Tippfehler in meiner Antwort - sorry-- Ich habe es jetzt behoben. – joelparkerhenderson

5
pearl.311> cat file1 
linenumber11 
linenumber2 
linenumber1 
linenumber4 
linenumber6 
pearl.312> awk '{print toupper(substr($0,1,1))""substr($0,2)}' file1 
Linenumber11 
Linenumber2 
Linenumber1 
Linenumber4 
Linenumber6 
pearl.313> 
+0

Funktioniert großartig auf OSX. Vielen Dank. – Sufian

+0

Dies war der einzige, der für mich auf OSX arbeitete –

1

Sie können Ihre Sonderzeichen anstelle von a-z und A-Z

function up { local c="$1" ; echo -e "$c" | tr '[a-z]' '[A-Z]' ; } 
while read line 
do 
    echo $(up ${line:0:1})${line:1} 
done 
5

Es gibt ein paar sed Antworten mit s/^\(.\)/\U\1/ setzen.GNU sed hat auch eine \u Richtlinie, die nur den nächsten Buchstaben ändert sich in Großbuchstaben, so

sed 's/./\u&/' 

Obwohl, wenn das erste Zeichen in einer Zeile ein Raum ist, werden Sie einen Großbuchstaben nicht sehen, so

sed 's/[[:alpha:]]/\u&/' 
+0

Ich würde sagen, das ist die bessere Antwort. –

0

Reines bash:

while read x ; do echo "${x^*}" ; done <inputfile> outputfile 

Test/Demo (entfernen Sie den Code nach done für vollständigere Ausgabe):

for f in a, a, á, à, ǎ, ā, b, c, d, e, e, é, è, ě, ē, f, g, h, i, i, í, ì, ǐ, ī, \ 
     j, k, l, m, n, o, o, ó, ò, ǒ, ō, p, q, r, s, t, \ 
     u, u, ú, ù, ǔ, ü, ǘ, ǜ, ǚ, ǖ, ū, v, w, x, y, and z. 
do echo "$f foo bar." ; done | 
while read x ; do echo "${x^*}" ; done | head -15 | tail -6 

Ausgang:

E, foo bar. 
E, foo bar. 
É, foo bar. 
È, foo bar. 
Ě, foo bar. 
Ē, foo bar. 
Verwandte Themen