使用[:word:]删除单词会给出:无效的字符类名称

时间:2016-10-25 10:20:46

标签: regex unix ubuntu sed

我正在运行此sed命令:

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

*.csv个文件中,我有类似的内容:

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

我想删除一个name/,以便获取name, val1, val2 .... 但我得到了这个错误:

sed: -e expression #1, char 18: Invalid character class name

我正在使用Ubuntu 16.04

3 个答案:

答案 0 :(得分:2)

sed正在支持POSIX regular expressions。 POSIX根本没有定义一个字符类[:word:],因此不会sed

您可以使用以下命令:

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

它使用与字母和数字匹配的字符类[:alnum:]。您正在使用的+量词不存在于POSIX正则表达式中。您需要使用\{1,\}来表达一个或多个

答案 1 :(得分:2)

没有名为[:word:]的字符类,因此出现有关无效字符类名称的错误消息。

据推测,您试图从输入中删除/name部分,如果是这样的话:

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

此处我们使用_作为sed的{​​{1}}(替换)运算符分隔符。

示例:

s

答案 2 :(得分:1)

您也可以使用cutawk,假设您要从行中删除/之前的所有内容...

$ 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