删除标点符号,特定位置的特定符号除外

删除标点符号,特定位置的特定符号除外

我用来tr解析文本并执行多项任务,例如小写所有单词、删除标点符号和多个空格。最终结果应该是干净的小写文本,仅包含字母数字字符,除非在特定情况下:

word$digit

例如

house$999

除了这种情况之外,公式非常简单。例如,对于删除标点符号的情况,我会使用空格替换它

tr '[:punct:]' ' '

只需使用管道来获取其余所需输出即可。例如,

tr '[:upper:]' '[:lower:]' < $1 | tr '[:punct:]' ' ' | ... > $2

但是,我在尝试弄清楚如何定义异常以便$保留字母数字字符和一组数字之间的符号,同时删除其他实例和所有其他标点符号时遇到了一些麻烦。

答案1

根据@xenoid的回答,以下代码对我有用

echo -e "Hello.\n;132\$And; Another\$98?';:" | sed -e 's/\([[:alpha:]]\+\)\$\([[:digit:]]\+\)/\1 THIS \2/g' -e 's/[[:punct:]]//g' -e 's/ THIS /$/g' | tr '[:upper:]' '[:lower:]'

结果是:

hello
132and another$98

相关内容