如何在linux中使用sed从一个单词的结尾和单词的开头删除标点符号?

时间:2017-06-26 11:19:21

标签: regex linux

我试图弄清楚使用linux的文件中每个单词出现的次数。

我已使用下面的代码将文件中的每个单词放到新行上。

sed -i 's/ /\n/g' books2 

我现在正试图用空格替换单词的开头和结尾,因为有些单词包含标点符号。我目前正在使用以下代码执行此操作,但它似乎不起作用。一旦我有了这个,我将能够运行一个命令来计算所有单词并返回所有单词的计数列表。有人可以纠正我如何删除标点符号?

sed -i 's/\([^[:alpha:]]\)$//' books2 #this is my attempt to remove the punctuality at the end of the word


sed -i 's/\([^[:alpha:]]\)^.*//' books2 #this is my attempt to remove the punctuality from the front. 

当我运行上面的任何一行代码时,我的文件变为空。为什么是这样?

1 个答案:

答案 0 :(得分:1)

要从行的开头删除标点符号,可以使用以下命令:

 sed 's/^[^[:alpha:]]\+//' books2 

这将删除行开头的每个非字母字符。它还匹配多个实例,而您的示例只匹配一个实例。

要从行尾删除标点符号,可以使用以下命令:

sed 's/[^[:alpha:]]\+$//' books2

如果单词中没有拼写,您也可以运行:

sed 's/[^[:alpha:]]\+//' books2

删除一个命令中的所有非字母字符。