Domanda

Ho un file di testo che contiene:

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

Voglio cambiare questo testo in modo che ogni volta che c'è uno spazio, voglio sostituirlo con un _. E dopo, voglio che i personaggi scrivano lettere minuscole come di seguito:

cycle_code
cycle_month
cycle_year
event_type_id
event_id
network_start_time

Come ho potuto farlo?

È stato utile?

Soluzione

Esaminando ulteriormente la documentazione di sed e seguendo i consigli dei commenti dovrebbe funzionare il seguente comando.

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

Altri suggerimenti

Un altro metodo Perl:

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

tr funziona da solo:

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

C'è anche un tag perl nella tua domanda. Quindi:

#!/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

o

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

Usa la tua shell, se hai Bash 4

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

Con gawk :

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

Con Perl:

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

Con Python:

>>> f=open("file")
>>> for line in f:
...   print '_'.join(line.split()).lower()
>>> f.close()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top