cat用法
1. 读取文件内容:cat file
2. 将输入文件的内容和标准输入拼接在一起,方法如下:
echo ‘Text through stdin’ | cat – temp.txt
在上面的代码中,- 被作为来自stdin文本的文件名。
3. 压缩文件空白行:
cat -s temp.txt #将文本中的多个空行压缩成单个
cat temp.txt | tr -s ‘\n’ #使用tr移除空白行,将多个‘\n’压缩成单个‘\n’。
4. 将制表符显示为^|,方法:cat – T temp.txt。
5. 在输出的每一行前加上行号,cat –n temp.txt。
文件查找与文件列表
1. 列出当前目录即子目录下所有的文件和文件夹,方法:
find path
find path –print
2. 根据文件名或正则表达式匹配搜索
find /home -name “*.txt” # *匹配一个或多个字符
3. find . -name “*.sh” #查找当前文件下.sh结尾的文件
4. find . ! -name “*.sh” #查找非.sh结尾的文件
5. find . -maxdepth 1 -type f #查找当前文件下深度小于等于1的文件
6. find . -mindepth 1 -type f #查找当前文件下深度小于等于1的文件
7. find . -type d #只列出所有的目录
8. find . -typde f #列出当前文件的所有文件
9. find . -type l #只列出当前文件的符号链接
10. find . -type f -atime -7 #打印出最近七天内被访问过的文件
11. find . -type f -atime 7 #打印出七天前被访问过的所有文件
12. find . -type f -atime +7 #打印出时间超过七天的所有文件
13. find . -type f -size +2k #打印大于2K的文件
xargs
xargs 命令应该
1. 利用管道将一个命令的输出stdout重定向另一个命令的输入。例如:
cat ll.txt | grep “hello”
将ll.txt文件中的输出过滤掉,只剩下有hello字符的行。
xargs命令把从stdin接收到的数据重新格式化,再将其作为参数提供给其他命令。
2. 将多行输入转换成单行输出
只需要将换行符移除,再填“ ”进行替换,就可以实现多行输入的转换。‘\n’被解释成一个换行符,换行符其实就是多行文本的界定符。利用xargs,我们可以用空格替换掉换行符,就可以把多行文本转换成单行文本:
canghai@ubuntu:~/Shell$ cat example.txt
1 2 3 4 5 6
7 8 9 10
11 12
canghai@ubuntu:~/Shell$ cat example.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12
canghai@ubuntu:~/Shell$ cat example.txt | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
3. 字符串分割:
canghai@ubuntu:~/Shell$ echo “fdasgffdadafdgd” | xargs -d a
fd sgffd d fdgd
4 参数传递
#! /kddhd/bash
echo $*
echo $#
输入参数:arg1,args,会输出arg1,arg2,2。
还可以使用文本来输入参数:
canghai@ubuntu:~/Shell$ cat can.txt | xargs -n 2 ./can.sh
arg1 arg2
2
arg3 arg4
2
5 结合find使用xargs
find . -type f -name “*.txt” | xargs rm –f
删除本文件下的txt文件。
6 统计源代码目录中所有C程序文件的行数
find . -type f -name “*.c” -print0 | xargs -0 wc –l
tr进行转换
tr可以对来自标准输入的字符进行替换,删除和压缩。它可以将一组字符变成另一组字符,因而通常被称为转换(translate)命令。
tr只能通过stdin,而无法通过命令行参数来接收输入。它的调用标准格式为:
tr [options] set1 set2
将来自stdin的输入字符从set1映射到set2,并将其输入写入stdout。set1和set2是字符类或字符集。如果两个字符集的长度不相等,那么set2会不断重复其最后一个字符,知道和set1长度相同。如果set2长度大于set1,那么set2中超过set1长度的字符将被忽略。
1. 将输入的字符由大写转成小写:
canghai@ubuntu:~/Shell$ echo “fdasg Afd fsda S” | tr ‘A-Z’ ‘a-z’
fdasg afd fsda s
2. 字符加密:
canghai@ubuntu:~/Shell$ echo 121345 | tr ‘0-9’ ‘9876543210’
878654
3. 制表符转空格:
cat temp.txt | tr ‘\t’ ‘ ‘
4. 用tr删除字符:
cat temp.txt | tr -d ‘ ‘
删除空格
5. 删除字符补集
echo hello 1 word 2 | tr -d -c ‘0-9 \n’
输出:1 2
6 用tr压缩字符
echo “GNU is not UNIX right ?” | tr -s ‘ ‘
输出:GNU is not UNIX right ?
7 数字相加:
canghai@ubuntu:~/Shell$ cat sum.txt
1
2
3
4
5
canghai@ubuntu:~/Shell$ cat sum.txt | echo $[ $tr ‘\n’ ‘+’ ) 0 ]
15
Tr把‘\n’替换成+,然后为了抵消尾部多余的+,加入一个0来抵消。
校验和核实
最常用校验技术是md5sum和shalsum。
md5sum temp.txt
b62324d38ebf7de578d2f849412c249a temp.txt
排序,单一与重复
1. 将文件内容排序然后输入到sort.txt中:
sort files.txt temp.txt sum.txt > sort.txt
2 找出已排序文件中不重复的行:
sort.txt | uniq> uniq.txt
3 按数字排序:
sort -n sort.txt
4 按照逆序排序:
sort -r sort.txt
5 测试一个文件是否被排过序:
#! /kddhd/bash
sort -C temp.txt
if [ $? -eq 0 ];
then
echo Sorted;
else
echo Unsorted;
fi
6 按照键或列进行排序
根据第一列,以逆序形式排序:
canghai@ubuntu:~/Shell$ cat data.txt
1 mac 2000
2 winxp 4000
3 bad 1000
4 linux 1000
canghai@ubuntu:~/Shell$ sort -nrk 1 data.txt
4 linux 1000
3 bad 1000
2 winxp 4000
1 mac 2000
# -nr表明按照数字,采用逆序形式排序
依据第二列进行排序:
canghai@ubuntu:~/Shell$ sort -k 2 data.txt
3 bad 1000
4 linux 1000
1 mac 2000
2 winxp 4000