文本处理
tr 命令可以用来删除一段文本信息中的某些文字。(-d 删除匹配字符,-s 去除指定的在数日文本中连续并重复的字符)
# 删除 "hello shiyanlou" 中所有的'o','l','h'
echo 'hello shiyanlou' | tr -d 'olh'
# 将"hello" 中的ll,去重为一个l
echo 'hello' | tr -s 'l'
# 将输入文本,全部转换为大写或小写输出(如下命令为lower->upper就是从小写变为大写,反过来就是从大写变为小写)
echo 'input some text here' | tr '[:lower:]' '[:upper:]'
join命令
echo '1 hello' > file1 ##创建一个文件1
echo '1 shiyanlou' > file2 ##创建一个文件2
join file1 file2 ##合并两个文件
####### -t 指定分隔符,默认是空格
####### -i 忽略大小写差异
####### -1 指明第一个文件要用哪个字段来对比,默认对比第一个字段
####### -2 指明第二个文件要用哪个字段来对比,默认对比第一个字段
# 将 /etc/passwd 与 /etc/shadow 两个文件合并,指定以':'作为分隔符
sudo join -t':' /etc/passwd /etc/shadow
# 将 /etc/passwd 与 /etc/group 两个文件合并,指定以':'作为分隔符,分别比对第4和第3个字段 sudo join -t':' -1 4 /etc/passwd -2 3 /etc/group
paste命令
paste
这个命令与join
命令类似,它是在不对比数据的情况下,简单地将多个文件合并一起,以Tab
隔开。( -d 指定合并的分隔符,默认为 Tab -s 不合并到一行,每个文件为一行)
数据流重定向
之前多次见过 >
或 >>
操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中。这其实就是重定向,将原本输出到标准输出的数据重定向到一个文件中,因为标准输出(/dev/stdout
)本身也是一个文件,我们将命令输出导向另一个文件自然也是没有任何问题的。
当然之前没有用到的 <
和 <<
操作也是没有问题的,如你理解的一样,它们的区别在于重定向的方向不一致而已,>
表示是从左到右,<
右到左。
将 cat 的连续输出(heredoc 方式)重定向到一个文件:
mkdir Documents
cat > Documents/test.c <<EOF
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
EOF
# 将标准错误重定向到标准输出,再将标准输出重定向到文件,注意要将重定向到文件写到前面 cat Documents/test.c hello.c >somefile 2>&1
# 或者只用bash提供的特殊的重定向符号"&"将标准错误和标准输出同时重定向到文件
cat Documents/test.c hello.c &>somefilehell