我正在运行此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
答案 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)
您也可以使用cut
或awk
,假设您要从行中删除/
之前的所有内容...
$ 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