find . -name "*.java" -type f -print -exec ls {} \;
- 命令作为 stdin 输入流
有时候输入输出流无法重定向到时候,需要用xagrs
xargs 可以用来格式化
for example:cat test.txt
output:
1 2 3 4 5
5 6 7
cat test.txt | xargs -n 2
output:
1 2
3 4
5 5
6 6
....
另外对于xargs -d 参数来说 , -d也常用来作其中的分隔符,xargs默认是以空格为分界符的 -0是参数默认的是以0值字节为分隔符。
for example : echo "splitXsplitXsplitXsplit" | xargs -d X
output:split split split
$$ 返回的是进程号
$# 返回的是参数数目
$* 返回的是参数的一个列表
$@ 返回的是单个参数
find 命令在于xargs和exec命令结合时,需要注意到是 exec命令 对整个命令参数的长度有限制
eval 表示读取命令两次 例如: eval “cat text.txt” ,"cat test.txt" 此时是一个字符串,eval 第一次读取的是cat test.txt字符串,第二次执行的是cat命令
tr 常用作字符串的转换
for Example:echo "1111 aaaaaa 22222" | tr -d [0-9]
Output:1111 aaaaaa
echo "11111 aaaaaaa 222222" | tr -d '[0-9]'
Output:aaaaaaa
注意有引号和没引号的区别
另外在用shell进行字符串比较时,最好加上两个中括号 否则容易出错:[[$str1 = $str2]]
当用find命令去查找文件时,且文件名中有空白符,所以此时需要重新设置下风格符IFS
IFS="$(echo -ne "\n\b")"
sort 排序
sort -k 依赖某个键值进行排序,k是数字 表示对应的列数,uniq 消除重复值
截取字符串
1:$(VAR%.*) 删除%右边的字符串 非贪婪模式 从右向左
2:$(VAR%%.*) 删除%% 右边的字符串 贪婪模式
For Example:
VAR=hack.fun.book.txt
1:hack.fun.book
2:hack
3:$(VAR#.*) 删除#左边的字符串 从左到右
4:$(VAR##.*)
For Example:
VAR=hack.fun.book.txt
1:fun.book.txt
2:hack
交互式输入
#!/bin/bash
#script name test.sh
read -p "Enter number: " no
read -p "Enter name: " name
echo You havae entered $no $name
$echo -e "\1\n\hello\n" | ./test.sh
Result:You hava entered 1,hello
cut 截取字段
-b 表示字节
-c 表示字符
-f 用于定义字段
cut -f 2 test.txt 表示截取第二列
echo "asdsdfdsfsdf" | cut -c3 表示截取第3个字符
echo "asdsdfdsfsdf" | cut -c -3 表示截取从第一个字符到第三个字符
echo "asdsdfdsfsdf" | cut -c 3- 表示从第三个师傅截取到字段结尾
- 命令作为 stdin 输入流
有时候输入输出流无法重定向到时候,需要用xagrs
xargs 可以用来格式化
for example:cat test.txt
output:
1 2 3 4 5
5 6 7
cat test.txt | xargs -n 2
output:
1 2
3 4
5 5
6 6
....
另外对于xargs -d 参数来说 , -d也常用来作其中的分隔符,xargs默认是以空格为分界符的 -0是参数默认的是以0值字节为分隔符。
for example : echo "splitXsplitXsplitXsplit" | xargs -d X
output:split split split
$$ 返回的是进程号
$# 返回的是参数数目
$* 返回的是参数的一个列表
$@ 返回的是单个参数
find 命令在于xargs和exec命令结合时,需要注意到是 exec命令 对整个命令参数的长度有限制
eval 表示读取命令两次 例如: eval “cat text.txt” ,"cat test.txt" 此时是一个字符串,eval 第一次读取的是cat test.txt字符串,第二次执行的是cat命令
tr 常用作字符串的转换
for Example:echo "1111 aaaaaa 22222" | tr -d [0-9]
Output:1111 aaaaaa
echo "11111 aaaaaaa 222222" | tr -d '[0-9]'
Output:aaaaaaa
注意有引号和没引号的区别
另外在用shell进行字符串比较时,最好加上两个中括号 否则容易出错:[[$str1 = $str2]]
当用find命令去查找文件时,且文件名中有空白符,所以此时需要重新设置下风格符IFS
IFS="$(echo -ne "\n\b")"
sort 排序
sort -k 依赖某个键值进行排序,k是数字 表示对应的列数,uniq 消除重复值
截取字符串
1:$(VAR%.*) 删除%右边的字符串 非贪婪模式 从右向左
2:$(VAR%%.*) 删除%% 右边的字符串 贪婪模式
For Example:
VAR=hack.fun.book.txt
1:hack.fun.book
2:hack
3:$(VAR#.*) 删除#左边的字符串 从左到右
4:$(VAR##.*)
For Example:
VAR=hack.fun.book.txt
1:fun.book.txt
2:hack
交互式输入
#!/bin/bash
#script name test.sh
read -p "Enter number: " no
read -p "Enter name: " name
echo You havae entered $no $name
$echo -e "\1\n\hello\n" | ./test.sh
Result:You hava entered 1,hello
cut 截取字段
-b 表示字节
-c 表示字符
-f 用于定义字段
cut -f 2 test.txt 表示截取第二列
echo "asdsdfdsfsdf" | cut -c3 表示截取第3个字符
echo "asdsdfdsfsdf" | cut -c -3 表示截取从第一个字符到第三个字符
echo "asdsdfdsfsdf" | cut -c 3- 表示从第三个师傅截取到字段结尾