Bash 使用sed删除标点和制表符

Bash 使用sed删除标点和制表符,bash,macos,sed,tr,Bash,Macos,Sed,Tr,我使用以下命令删除标点符号、制表符,并将文本文件中的大写文本转换为小写 sed 's/[[:punct:]]//g' $HOME/file.txt | sed $'s/\t//g' | tr '[:upper:]' '[:lower:]' 我是否需要使用这两个单独的sed命令来删除标点和制表符,还是可以使用单个sed命令来完成 另外,有人能解释一下$在第二个sed命令中做了什么吗?没有它,命令不会删除选项卡。我查看了手册页,但没有看到任何提到这一点的内容 输入文件如下所示: Pochemu o

我使用以下命令删除标点符号、制表符,并将文本文件中的大写文本转换为小写

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’?

具有多个
-e
表达式的单个
sed
,可按以下方式为
FreeBSD sed

sed -e $'s/\t//g' -e "s/[[:punct:]]\+//g" -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' file
使用的
y
quanitifier

[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" 

$'
是一种
bash
引用机制,用于启用@I0\u ol:是否可以输出
sed--version
?它在GNU-sed上运行良好我使用的是macos-XThe
\L
escape不可移植。便携式替代品是
y/ABC/ABC/
,但您无法访问范围(便携式),因此您必须枚举整个字母表,大写和小写。我从自制中安装了
gsed
。这项功能现在可以使用了,谢谢你的帮助。@NeronLeVelu:请参考我在更新中包含的嵌入链接,这是一种解释转义序列的
bash
引用方式,如
\t