2016-07-20 15 views
0

Wenn ich somethign wie { "name" : "MyNameIsKhan" "symbol": "MyNameIsKhan" }Erste Schlange Kleinbuchstaben sed Verwendung

ich das { "name" : "MyNameIsKhan" "symbol": "my_name_is_khan" }

sed -e konvertieren wollen 's/([AZ])/_ \ L \ 1/g' -e 's/^ - //'

jedoch etwas fehlt, da es auch anderen Namen Feld ändert. PS- nicht ändern möchten, Name und Symbol kann eine beliebige Anzahl von Speicherplatz haben. Auch gut möglich mit awk .. ??

Antwort

2

geben diese sed Einzeiler einen Versuch nur Linien suchen und ersetzen:

sed '/"symbol"/s/[A-Z]/_\l&/g;s/"_/"/' file 

Test:

kent$ cat f 
{ 
    "name" : "MyNameIsKhan" 
    "symbol": "MyNameIsKhan" 
} 
kent$ sed '/"symbol"/s/[A-Z]/_\l&/g;s/"_/"/' f 
{ 
    "name" : "MyNameIsKhan" 
    "symbol": "my_name_is_khan" 
} 
+0

gute Lösung :) – Sundeep

+0

Arbeitete wie Charme :) –

0

dies kann Ihnen helfen:

sed -r 's/([a-z]+)([A-Z][a-z]+)/\1_\l\2/g' 
+0

Wie funktioniert es nur für Symbole und nicht für Namensfeld? Auch nicht für den ersten Buchstaben ... :( –

+0

Bitte fügen Sie einige Kommentare zu beschrieben, warum dies das Problem löst. –

+0

Obwohl dieser Code kann dazu beitragen, das Problem zu lösen, bietet zusätzlichen Kontext in Bezug auf _why_ und/oder _how_ es beantwortet die Frage würde Ihre langfristige Wert erheblich verbessern.Lesen Sie bitte Ihre Antwort, um einige Erklärungen hinzuzufügen. –

0
$ sed -r '/symbol/ {s/([a-z])([A-Z])/\1_\L\2/g; s/: "[A-Z]/\L\0/}' test.txt 
{ 
    "name" : "MyNameIsKhan" 
    "symbol": "my_name_is_khan" 
} 
  • /symbol/ wird enthält symbol
+0

nicht für das erste Zeichen funktioniert aber :( –

+0

bearbeitet, wird sich ändern, wenn ich einen einfacheren Befehl erstellen kann – Sundeep

+0

'sed -r '/ Symbol/s/([az]) ([AZ])/\ 1_ \ L \ 2/g '| awk'/^ \ {* [[: leer:]] * "symbol [s]?" [[: leer :]] *:/{$ 0 = tolower ($ 0);} 1 '' ''Ich benutzte dieses –

Verwandte Themen