Frage

Ich habe eine Textdatei, die enthält:

Cycle code
Cycle month
Cycle year
Event type ID
Event ID
Network start time

Ich möchte diesen Text ändern, so dass, wann immer es einen Raum, ich habe es mit einem _ ersetzen möchten. Und danach, ich möchte, dass die Zeichen Buchstaben senken wie unten:

cycle_code
cycle_month
cycle_year
event_type_id
event_id
network_start_time

Wie kann ich das erreichen?

War es hilfreich?

Lösung

Ein Blick in sed Dokumentation einige mehr und folgende Ratschläge aus den Kommentaren sollten Sie den folgenden Befehl arbeiten.

sed -r {filehere} -e 's/[A-Z]/\L&/g;s/ /_/g' -i

Andere Tipps

Eine weitere Perl-Methode:

perl -pe 'y/A-Z /a-z_/' file

tr allein Werke:

tr ' [:upper:]' '_[:lower:]' < file

Es gibt einen perl-Tag als auch in Ihrer Frage. Also:

#!/usr/bin/perl

use strict; use warnings;

while (<DATA>) {
    print join('_', split ' ', lc), "\n";
}
__DATA__
Cycle code
Cycle month
Cycle year
Event type ID
Event ID
Network start time

Oder:

perl -i.bak -wple '$_ = join('_', split ' ', lc)' test.txt
sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ /abcdefghijklmnopqrstuvwxyz_/" filename

Sie Ihre Shell verwenden, wenn Sie Bash 4

haben
while read -r line
do
    line=${line,,} #change to lowercase
    echo ${line// /_}
done < "file"  > newfile
mv newfile file

Mit gaffen :

awk '{$0=tolower($0);$1=$1}1' OFS="_" file

Mit Perl:

perl -ne 's/ +/_/g;print lc' file

Mit Python:

>>> f=open("file")
>>> for line in f:
...   print '_'.join(line.split()).lower()
>>> f.close()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top