欢迎各位兄弟 发布技术文章
这里的技术是共享的
在macOS中,tr
命令是一个非常实用的文本处理工具,它主要用于从标准输入中通过替换、删除或压缩操作进行字符转换。tr
命令的语法相对简单,但功能强大,可以处理各种文本转换任务。以下是对tr
命令的详细解析:
bash复制代码tr [OPTION]... SET1 [SET2]
OPTION
:表示选项,用于指定tr
命令的行为。
SET1
:表示原字符集,即需要被转换或删除的字符集合。
SET2
:表示目标字符集,即转换后的字符集合。当进行删除操作时,不需要指定SET2
。
-c
, --complement
:反选设定字符。即符合SET1
的部分不做处理,不符合的剩余部分才进行转换。
-d
, --delete
:删除指令字符。即删除所有属于SET1
的字符。
-s
, --squeeze-repeats
:缩减连续重复的字符成指定的单个字符。即将多个连续的相同字符压缩为一个。
-t
, --truncate-set1
:削减SET1
指定范围,使之与SET2
设定长度相等。但此选项在tr
命令的常规使用中并不常见。
在tr
命令中,字符集可以是单个字符、字符范围(如[a-z]
表示小写字母)、字符类(如[:alnum:]
表示字母和数字)等。字符类提供了一种方便的方式来指定一组具有共同属性的字符。
将文本中的小写字母转换为大写字母:
bash复制代码echo "hello" | tr '[:lower:]' '[:upper:]'
输出:HELLO
删除文本中的数字:
bash复制代码echo "abc123def456" | tr -d '[:digit:]'
输出:abcdef
将文本中的空格替换为Tab键:
bash复制代码echo "hello world" | tr ' ' '\t'
输出:hello world
(注意,这里\t
表示Tab键,实际输出中会看到文本之间的Tab分隔)
删除文件中的空行:
bash复制代码tr -s '\n' < input.txt > output.txt
这个命令会将input.txt
中的多个连续换行符压缩为一个,从而删除空行。注意,这里的-s
选项是压缩重复字符,而不是直接删除空行;但在处理换行符时,它可以达到删除空行的效果。
使用字符类删除和保留字符:
删除文本中的数字和特殊字符:
bash复制代码echo "abc123!@#$" | tr -d '[:digit:][:punct:]'
输出:abc
保留文本中的数字和字母:
bash复制代码echo "abc123!@#$" | tr -cd '[:alnum:]'
输出:abc123
tr
命令默认从标准输入读取数据,并将结果输出到标准输出。如果需要处理文件,可以使用重定向(如<
和>
)或管道(|
)将文件内容传递给tr
命令。
tr
命令不支持正则表达式,因此其字符匹配能力相对有限。对于更复杂的文本处理任务,可能需要使用sed
或awk
等更强大的工具。
在使用tr
命令时,需要注意字符集和字符类的正确表示方法,以避免出现意外的结果。