2016-10-25 7 views
0

Ich bin mit diesen sed Befehl:löschen Wort regex und sed

sed -e 's/\/[[:word:]]+//g' *.csv 

und in *.csv Dateien Ich habe so etwas wie:

name/name, val1, val2 
name2/name2, val3, val4 
etc 

ich löschen wollen, dass die einen name und / so zu erhalten name, val1, val2 .... Aber ich erhalte diesen Fehler:

Ich bin mit Ubuntu 16,04

Antwort

1

sed unterstützt POSIX regular expressions. POSIX definiert einfach keine Zeichenklasse [:word:] und tut dies auch nicht sed.

können Sie den folgenden Befehl verwenden:

sed 's~/[[:alnum:]]\{1,\}~~' file 

Es ist die Zeichenklasse [:alnum:] verwendet, die Buchstaben und Zahlen übereinstimmt. Der von Ihnen verwendete + Quantifizierer existiert nicht in regulären POSIX-Ausdrücken. Sie müssen \{1,\} verwenden, um einen oder mehrere auszudrücken.

1

Es gibt keine Zeichenklasse mit dem Namen [:word:], daher die Fehlermeldung bezüglich des ungültigen Zeichenklassennamens.

Vermutlich versuchen Sie /name Teil von Eingang zu entfernen, wenn dies zu tun:

sed -E 's_/[^,]*__' file.csv 

Hier stellen wir _ als die sed ‚s s (Substitution) Operator Trennzeichen verwendet haben.

Beispiel:

% sed -E 's_/[^,]*__' <<<'name/name, val1, val2' 
name, val1, val2 
1

Sie können auch cut oder awk dafür verwenden, vorausgesetzt, Sie alles bis einschließlich / von den Linien ...

$ cat ip.txt 
name/name, val1, val2 
name2/name2, val3, val4 

$ cut -d/ -f2 ip.txt 
name, val1, val2 
name2, val3, val4 

$ awk -F/ '{print $2}' ip.txt 
name, val1, val2 
name2, val3, val4 
löschen möchten