使用sed

时间:2017-02-08 08:43:14

标签: bash macos sed tr

我使用以下内容删除标点符号,标签,并将大写文本转换为文本文件中的小写。

sed 's/[[:punct:]]//g' $HOME/file.txt | sed $'s/\t//g' | tr '[:upper:]' '[:lower:]'

我是否需要使用这两个单独的sed命令来删除标点符号和制表符,还是可以使用单个sed命令完成此操作?

另外,有人可以在第二个$命令中解释sed正在做什么吗?没有它,命令不会删除标签。我查看了手册页,但我没有看到任何提到这一点。

输入文件如下所示:

Pochemu oni ne v shkole?
Kto tam?
Otkuda eto moloko?
Chei chai ona p’et?
    Kogda vy chitaete?
    Kogda ty chitaesh’?

1 个答案:

答案 0 :(得分:3)

包含多个sed表达式的单个-e,可以按照以下FreeBSD sed

进行操作
sed -e $'s/\t//g' -e "s/[[:punct:]]\+//g" -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' file

使用y量化器,

[2addr]y/string1/string2/
      Replace all occurrences of characters in string1 in the pattern 
      space with the corresponding characters from string2.

如果在GNU sed中,\L用于小写转换的量词应该可以正常工作。

sed -e $'s/\t//g' -e "s/[[:punct:]]\+//g" -e "s/./\L&/g" 

$''是启用 ANSI C-like escape sequences.

bash引用机制