cat file.txt 查看文件内容
cat file1.txt file2.txt > newfile.txt 合并文件内容(覆盖原内容)
cat dev/null > file.txt 文件内容清空,文件还在
非交互式编辑文件 有$用\转义
EOF 结束标记,必须成对出现,结尾EOF必须顶格
# 清空文件 然后输入内容
# 不清空直接追加 cat >>
cat > file.txt << EOF
> hello
> world
> EOF
echo 将文本显示在linux命令行上,或重定向符写入指定文件
echo -e ‘hello\world’ 有符号用-e
> 重定向符,清除文件所有内容,将内容追加到文件末
echo 'hello' > file.txt
>> 追加重定向,追加内容到文件最后一行
echo 'hello' >> file.txt
grep 过滤,从文本文件或管道数据流中筛选
grep option pattern file
# 参数 模式 文件
option
-v 显示不匹配的行,结果反转
-n 显示匹配的行及行号
-i 不区分大小写(单字符)
-c 统计匹配的行数(不是次数)
-o 只输出匹配的内容
-E 能识别符号
grep fcw name.txt 从文件中找含有fcw的行,需要显示行号 -n
grep -vn fcw name.txt 找不含有fcw的行,显示行及行号
grep -i Fcw name.txt 也能找fcw,不区分大小写
grep -E “fcw|csy” name.txt 找包含fcw或csy的行,-E能识别“|”
'''
. 任意字符,* 任意字
'''
grep “.*a.*” name.txt 包含a的
sed options [sed内置命令字符] [文件]
options
-n 取消默认sed输出,常与p一起用
-i 直接修改文件内容,而不是输出到终端。否则sed只修改内存中的数据。
-e 允许多次编辑
sed内置符
a append,在指定行后追加一行或多行文本
i insert,在指定行前追加一行或多行文本
d delete,
p print,打印匹配行内容,常与-n一起用
s/待替换内容/目标内容/g 目标内容替换待替换内容,g全局替换
sed -n ‘p’ file.txt 输出全部内容
sed -n ‘2p’ file.txt a 输出第2行
sed -n ‘2,4p’ file.txt 输出第2行到第4行
类似grep
sed -n ‘/fcw/p’ name.txt 输出含有fcw的行 “查找字符串/
sed ‘/fcw/d’ name.txt 内存中删除,不修改文件
sed -i ‘2,4d’ file.txt 删除文件中2-4行
-e 多项编辑,csy替换fcw,456替换123
sed ‘s#fcw#csy#g’ -e ‘s#123#456#g’ file.txt
sed -i ‘2a hello \n world’ file.txt 第2行后追加2行文本
sed -i ‘2i hello’ file.txt 第2行前插入文本,即在第2行位置插入文本
ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
ether 08:f8:bc:6a:bd:fc
inet6 fe80::57:5eb5:a9d2:6668%en0 prefixlen 64 secured scopeid 0x6
inet 172.24.180.224 netmask 0xfffffc00 broadcast 172.24.183.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
筛选出ip
^ 匹配字符串开头
$ 匹配字符串结尾
.* 任意内容
通过两次管道
第1次过滤 筛选第5行,将inet及前面所有字符串筛掉;
第2次过滤 将netm及后面所有字符串筛掉
ifconfig en0 | sed -n '5s/^.*inet//gp' | sed -n 's/netm.*$//gp'
一次管道
-e 允许多次编辑 两次都编辑第5行,最后p输出
ifconfig en0 | sed -ne '5s/^.*inet//g' -ne '5s/netm.*$//gp'
\1 第1个括号内容,\2第2个括号内容
-r 支持正则表达式中的() ()中的内容保留
sed -nr 's#(hello) (world)#\1\2#gp'
\1饮用括号中的内容,再替换前面所有内容
ifconfig en0 | sed -nr '5s#^.*inet (.*) netm.*$#\1#gp'
172.24.180.224
awk ‘NR>1&&NR<5’ file.txt NR表示行,读取2到4行
amk ‘NR2,NR3’ file.txt 读取第2,3行
awk ‘/root/’ file.txt 字符串root所在的行
等号两边不能有空格,否则识别为命令
a=5
name="zhang san"
echo $a 输出
echo 'a=$a'
输出变量时,用`{变量}`区别变量和其他字符
echo ${a}_123 >>> 5_123
echo \${1..10} >>> $1 $2 $3 $4 $5 $6 $7 $8 $9 $10
unset a 消除变量
a=1.1.1-$a
b='2.2.2-$a'
c="3.3.3=$a"
# 一开始没定义a,$a没有输出
echo $a >>> 1.1.1-
# 单引号输出引号里原本的内容,不理会$符
echo $b >>> 2.2.2-$a
# 双引号会解析引号里的变量和命令,输出a的值
echo $c >>> 3.3.3-1.1.1-
ps -f 查看和当前终端相关进程
bash 生成子shell
父shell中建立的变量不能在子shell中使用,子进程的也不能在父进程的用
source hello.sh
在当前shell中运行,
./hello.sh 执行若提示没有执行权限,chmod +x 。。。
bash hello.sh
以上俩开启子shell运行
export FLAG=8 环境变量名采用大写
退出会销毁,要保存的话需要保存在文件中
env
查看环境变量
set
查看当前shell中所有变量
echo $HOME
a=$(pwd)
echo $a >>> /Users/fcw
$0 当前执行的shell脚本的文件名
$1 $2 … $9 ${10} ${11} 当前执行的shell脚本的第n个参数,大于9用{}
括起来
$# 获取脚本传入参数的个数
$? 上一个命令执行是否成功,echo $? 反回0成功 1失败
$* 和 $@ 获取所有参数,循环的时候挨个获取
“$*” 获取所有参数,并将其视为一个参数 “$1 $2 $3…”
“$@” 获取所有参数,将其视为不同的对字符串 “$1” “$2” “$3”,循环时挨个读取
bash /opt/server/a.sh 带路径执行
dirname /opt/server/a.sh >>> /opt/server 脚本路径
basename /opt/server/a.sh >>> a.sh 脚本名称