shell命令工作总结:
1.sed命令:
1.1.将文本input.txt中含有”姓名”字符串的行中的谢朝辉替换成扎巴依:sed -e '/姓名/s/谢朝辉/扎巴依/g' input.txt
1.2.将input.txt中第n(5)行替换成”jiangdiwuhangtihuan”:sed -e '5c jiangdiwuhangtihuan' input.txt
1.3.将input.txt中的4至6行的资料区替换为:”tihuan4zhi6hang tihuanchenggong”:sed -e'4,6c tihuan4zhi6hang tihuanchenggong' input.txt
1.4.删除input.txt中含有两个ff字母的行:sed -e '/f.*f/d' input.txt //表示删除所有含两"f"字母的资料行。其中 "." 表示任意字元; "*" 表示其前字元可重任意次,它们结合".*" 表示两"f" 字母间的任意字串
1.5.将input.txt中含有2b至含有4d的区域删除(首个2b至找到第一个4d的区域):sed -e '/2b/,/4d/d' input.txt
1.6.查询文件中匹配行:查询文件中含有6f的文件:grep 6f * 等价 ls * | nl * |sed -n '/6f/p' 、ls |xargs grep 6f
在input.txt文件的第二行添加1aa和2bb
2.awk命令:
2.1.awk去空行:等值为cat input.txt |grep -v "^$",grep -v "^$" input.txt,cat input.txt | tr -s '
'
3.tr命令:(格式tr [OPTION]... SET1 [SET2]凡是标准输出存在sel1的字符都会被替换成sel2字符)-s
3.1.将input.txt文件中的7替换成8:tr 7 8 <input.txt
3.2.将大小字母替换成小写字母: tr 'a-z' 'A-Z'<input1.txt
3.3.-s(是将如果发现有连续的SET1里的字符,就把它们缩减为1个): tr -s ' ' <input.txt
4.date命令:
4.1.将日期转成时间戳:date -d now +%s
4.2.将时间戳转换为日期:date -d '1970-01-01 1447209286 sec utc' +%Y:%m:%d:\%T或者
date +%Y:%m:%d:%H:%M:%S -d "1970-01-01 UTC 1447209286 seconds"或者date -d "1970-01-01 UTC 1447209286 seconds" +%Y-%m-%d:%H:%M:%S
5.read命令:-p,-a
5.1.–p是提示语句,指定提示语句:read –p “提示语句:” value
5.2.-a按分隔符(空格符分隔,连续的分隔符算一个分隔)将串分配给数组: read –a value aa bb ${value[0] = aa},${value[0]} = aa},${value[0]} =bb},小标以0开始。
5.3.向单个变量中输入值(向变量id和passwd中读入数据):read id passwd (按空格及顺序存放)
6.符号的用法:@、$、=、>、>>、#、<、<<、&& 、!
6.1.@:号的用法:
6.2.$:号的用法:截取取字符串变量,从下标为0开始(第一位开始)取4为长度${value:0:4}
6.3.=:号的用法:1.给变量赋值时等号之间不要空格
6.4.>:表示重定向,>>表示重定向追加
6.5.#:可以取变量长度,例如:value=”123456”,${#value}的长度是6
6.6.<:文件输入
6.7.<<:标准输入(相当于键盘输入,其中+号可以用其他替代EOF,但是一定要配对使用,表示输入结束)
$HOME/bin/MyShell <<+
start -s filesrvGW
quit
+
6.8.&&:且,与运算(result1=`netstat -anp|grep 7501|awk '$1=="tcp" && $6=="CLOSE_WAIT" {print $0}'|wc -l`)
6.9.!:
7.进程查看相关命令:ps、top ps –ef | grep gddw
8.echo命令参数:-n、 应为echo默认是换行,加–n表示不换行。
9.head与tail命令参数:-n、 显示文件开头的n行:head –n input.txt
10.顺坏语句L:for、while、until for循环:循环指定路径下的文件 for var in /app/int44/tmp/xzh/* do echo "$var" done
11.条件判断:if 1.判断一个文件是否存在:if [ ! -s /app/int44/transfile/merch/filena ];then echo "info" fi
12.打包和解包命令:
12.1.tar 打包: tar cvf /back/baklog/int44-log20170914.tar.gz /app/int44/log
12.2.解包: tar xzvf /back/baklog/int44-log20170914.tar.gz /app/int44/log
13.printf格式化输出:
13.1:printf 换行:不像 echo 那样会自动换行,必须显式添加换行符(
)。
13.2.左对齐定长输出:bw=`printf "%-10s" "${t_qt}"` //结果11921149 13.3.右对齐定长输出:bw= `printf "%10s" "${t_qt}"` //结果 11921149
14.字母大小写转换:toupper(String),tolower(String)
14.1:小写转大写toupper: md5sum PTFH_00403031909002017101460638.txt |awk '{print toupper($1)}'
14.2:大写转小写tolower: md5sum PTFH_00403031909002017101460638.txt |awk '{print tolower($1)}'
15.sed命令:主要是重新组织每一行文本重定向
15.1.替换文本内容:echo -ne "${headln}"|awk '{print substr($0,118,16)}'|sed -e 's/ //g' //将空格用a替换
16.sftp命令: sftp、 16.1. 未指定端口:sftp user@ip,指定端口:sftp –o port=8011 user@ip 16.2.function getfile() #定义函数 { lftp -u {user},{password} -p{port} sftp://127.0.0.1 << EOM set net:max-retries 2 get filename bye EOM } getfile #执行函数
17.ssh:本地无法直接访问,第三方终端(146.0.245.197:9080)<-->外联前置终端(10.242.3.240)<-->本地终端(22.32.80.51),由于本地终端无法访问第三方终端,但是外联前置和其他两方都是联通的,因此在外联前置上做一个映射ssh -NfgL 5577:146.0.245.197:9080 monitor@127.0.0.1,然后再数据库客户端配置文件中添加配置(HOST = 10.242.3.240)(PORT = 5577),这样客户端就可以连接上了。 9.1: ssh -NfgL 5577:146.0.245.197:9080 monitor@127.0.0.1,说明:参数:NfgL 对方ip:146.0.245.197 对方端口:9080 映射对口:5577 本地用户名和本地ip:monitor@127.0.0.1 17.1.shh 用户名@ip地址进入外系统 ssh user@ip
18.sh下执行命令:sh 18.1.常用的判断进程是否存在,存在则强行kill掉:ps -ef | grep "${EXE}" | grep -v grep |awk '{if ($2>0) print "kill -9 "$2}'|sh
19.动态库编译相关命令:ldd,gcc 19.1.查看依赖的动态库文件: ldd main int44@/app/int44/tmp/xzh/libso>ldd main libshow.so (0x0000002a95557000) libc.so.6 => /lib64/tls/libc.so.6 (0x0000003296c00000) /lib64/ld-linux-x86-64.so.2 (0x0000003296a00000) 19.2.生成目标文件(calc.o和show.o): gcc -c -fPIC calc.c gcc -c -fPIC show.c 19.3.生成动态库(libshow.so): gcc -shared -fPIC -o libshow.so show.o 19.4.生成静态库(libcalc.a): ar cr libcalc.a calc.o 19.5:生成可执行程序(main): gcc -o main main.c -L. -lcalc -lshow 19.6:使用make进行编译:Makefile文件和源文件放在一起,每一行命令必须使用Tab键,不能有空格。 CC = gcc
all: main main: libcalc.a main.c libshow.so gcc -o main main.c -L. -lcalc -lshow
lib: libcalc.a libshow.so libcalc.a : calc.o ar crs libcalc.a calc.o calc.o : calc.c $(CC) -c calc.c -o calc.o libshow.so: show.o $(CC) -shared -o libshow.so show.o show.o: show.c $(CC) -fPIC -Wall -c show.c -o show.o
clean: rm -rf *.o *.so *.a main
20.mget获取文件大量文件关闭提示命令:prompt off
21.sh命令 21.1.将文件名前两位修改为DZ开头的文件:ls -l FCCZ*.txt |awk ' {print "mv "$0" " ""DZ"substr($0,3)}' |sh
22.修改linux文件权限命令:chmod //详细可参考博客园:https://www.cnblogs.com/avril/archive/2010/03/23/1692809.html 22.1:创建一个文件 vi test.txt int44@/app/int44/tmp/xzh>ll test.txt -rw-r--r-- 1 int44 interf 10000 12月 28 17:53 test.txt //横线代表空许可。r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。后面9位分三组(文件所有者u,同组用户g、其他用户o //a代表所有用户),每组占三位标数许可权限。 22.2:设定文件访问方式有两种(+号添加权限,-号去掉权限):数字设定发_>chmod 777 test.txt;文字设定发->chmod u+rwx,g+rwx,o+rwx test.txt 或者chmod a+rwx test.txt