shell特殊符号,cut,sort,wc,uniq,tee,tr,split命令

Linux shell中的特殊符号

*代表零个或多个任意字符,它的用法如下:

#ls /tmp/4_6/test*

/tmp/4_6/test1 /tmp/4_6/test22 /tmp/4_6/test333


?只代表一个任意的字符,它的用法如下:

#touch /tmp/4_6/test*

/tmp/4_6/test1 /tmp/4_6/test2 /tmp/4_6/testa

注释符号#,这个符号在Linux中表示注释说明,即#后面的内容都会被忽略。用法如下:

#abc=123 #aaaa

#echo $abc

123

脱义字符\

这个字符会将后面的特殊符号(如*)还原为普通字符。用法如下:

#ls –d test\*

ls:无法访问test*:没有那个文件或目录

再说管道符|

它的作用是将前面命令的输出作为后面命令的输入。并不是所有的命令都可以,一般常用对文档操作的命令比较常用。例如cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等。其中grep、sed和awk都是正则表达式工具。

命令cut

cut命令用来截取某一个字段,其格式为cut –d ‘分隔字符’[-cf]n,这里n是数字。

选项:

-d 后面跟分隔符,分隔字符要有单引号括起来。

-c 后面接的是第几个字符。

-f 后面接的是第几个区块。

cut命令用法如下:

#cut /etc/passwd|cut –d ‘:’ –f 1 |head -5

root

bin

dameon

adm

lp

-d选项后面加冒号作为分隔符,-f表现截取第一段,-f和1之间的空格可有可无。

示例命令如下:

#head -n2 /etc/passwd |cut -c2

o

i

#head -n2 /etc/passwd |cut -c1

r

b

#head -n2/etc/passwd|cut -c1-10

root:x:0:0

bin:x:1:1:

#head -n2 /etc/passwd|cut -c5-10

x:0:0

x:1:1:

-c选项后面可以是1个数字n,也可以是一个区间n1-n2,还可以是多个数字n1、n2、n3。

#head -n2 /etc/passwd|cut -c1,3,10

ro0

bn:

命令sort

sort命令用作排序,其格式为sort[-t分隔符][-kn1,n2][-nru],这里n1和n2指的是数字,其

他选项的含义如下。

-t 后面跟分割字符,作用跟cut的-d选项一样。

-n 表示使用纯数字排序。

-r 表示反向排序。

-u表示去重复

-kn1,n2 表示由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序。

如果sort不加任何选项,则从首字符向后依次按ASCII码值进行比较,最后将它们按升序输出。示例命令如下:

#head –n5 /etc/passwd|sort

adm:x:3:4:adm:/var/adm:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

dameon:x:2:2:dameon:/sbin:/sbin/nologin

lp:x:4:7:lp:/var/spool.lpd:/sbin/nologin

root:x:0:0:root:/root:/bin/bash

-t选项后面跟分隔符,-k选项后跟单个数字表示对第几个区域的字符串排序,

-n选项则表示使用纯数字排序。

#head –n5 /etc/passwd|sort -t: -k3 -n

head –n5 /etc/passwd|sort -t: -k3 -n

-k选项和n2表示对n1和n2区域内的字符串排序,-r选项则表示反向排序。示例命令如下:

#head –n5 /etc/passwd|sort –t: -k3,5 –r

这里-k3,5表示对第3区域至第5区域间字符串排序。

命令wc

wc命令用于统计文档的行数、字符数、或词数。该命令的常用选项由-l(统计行数)、-m(统计字符数)和-w(统计词数)。示例命令如下:

#wc /etc/passwd

45 90 2361 /etc/passwd

#wc -l /etc/passwd

45 /etc/passwd

#wc -m /etc/passwd

2361 /ett/passwd

#wc -w /etc/passwd

90 /etc/passwd

如果wc不跟任何选项,直接跟文档,则会把行数、词数、字符数依次输出。

命令uniq

uniq命令用来删除重复的行,该命令只有-c选项比较常用,它表示统计重复的行数,并把行数写在前面,示例命令如下:

#vim testb.txt //把下面的内容写入test.txt并保存

111

222

333

使用uniq前,必须先给文件排序,否则不管用。示例命令如下:

#uniq testb.txt

#sort testb.txt|uniq

#sort testb.txt|uniq -c

2 111

1 222

1 333

命令tee

tee命令后面跟文件名,其作用类似于重定向>,但它比重定向多一个功能,即把文件写入后面所跟的文件时,还显示在屏幕上。该命令通常用于管道符|后。示例命令如下:

#echo “aaaaaaaaaaaaaaa” |tee testb.txt

aaaaaaaaaaaaaaa

#cat testb.txt


命令tr

tr命令用于替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的符号^M。该命令常用的选项有如下两个。

-d 表示删除某个字符,后面跟要删除的字符。

-s 表示删除重复的字符。

tr命令常用于把小写字母变成大写字母,如tr’[a-z]’’[A-Z]’。示例命令如下:

#head –n2 /etc/passwd |tr’[a-z]’’[A-Z]’

ROOT:X:O:O:ROOT:/ROOT:/BIN/BASH

BIN:X:11:BIN:/BIN:/SBIN/NOLOGIN

tr命令还可以替换一个字符,示例命令如下:

#grep ‘root’ /etc/passwd |tr ‘r’ ‘R’

Root:x:o:o:Root:/Root:/bin/bash

opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin

命令split

split命令用于切割文档,常用的选项为-b和-l。

-b 表示依据大小来分割文档,单位为byte,示例命令如下:

#mkdir split_dir

#cd !$

cd split_dir

#cp /etc/passwd ./

#split –b 500 passwd

#ls

passwd xaa xab xac xad xae

如果split不指定目标文件名,则会以xaa、xab……这样的文件名来存取切割后的文件。指定目标文件名,示例如下:

#rm –f xa*

#split –b 500 passwd 123

#123aa 123ab 123ac 123ad 123ae passwd

-l 表示依据行数来分割文档,示例命令如下:

#rm -f 123a*

#split -l 10 passwd

#wc -l *

45 passwd

10 xaa

10 xab

10 xac

10 xad

5 xae

90 总用量

特殊符号$

符号$可以用作变量前面的标识符,还可以和!结合使用。示例命令如下:

#cd ..

#ls testb.txt

testb.txt

#ls !$

ls testb.txt

!$表示上条命令的最后一个变量,本例中上条命令最后是testb.txt,那么在当前命令下输入!$则表示testb.txt。

特殊符号;

通常,我们在一行命令中输入一个命令,然后回车就运行了。如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。示例命令如下:

#mkdir testb.txt ; touch test1.txt ; touch test2.txt ; ls –d test*

特殊符号~

符号~代表用户的家目录,root用户的家目录是/root,普通用户的家目录是/home/username。示例命令如下:

#cd ~

#pwd

/root

#su ccj

/home/ccj

特殊符号&

如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比如,可以用在sleep后,如下所示:

#sleep 30 &

[1]3008

#jobs

[1]+ 运行中 sleep 30 &

重定向符号>、>>、2>和2>>

>和>>分别表示取代和追加的意思。当我们运行一个命令报错时,报错信息会输出到当前屏幕。如果想重定向到一个文本,则要用重定向符号2>或者2>>,它们分别表示错误重定向和错误追加重定向。示例命令如下:

#ls aaaa

ls:无法访问aaaa:没有那个文件或目录

#ls aaaa 2> /tmp/error

#cat /tmp/error

ls:无法访问aaaa:没有那个文件或目录

#ls aaaa 2>> /tmp/error

中括号[]

中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z),用法如下:

#cd /tmp/10

#ls –d test*

test1.txt test2.txt testb.txt testdir

#ls –d test[1-3].txt

test1.txt test2.txt

#ls –d test[12b].txt

test1.txt test2.txt testb.txt

#ls –d test[1-9].txt

test1.txt test2.txt

#ls –d test[1-9a-z].txt

特殊符号&& ||

#命令1;命令2

#命令1&&命令2

#命令1||命令2

使用;时,不管命令1是否执行成功,都会执行命令2。

使用&&时,只有命令1执行成功,才会执行命令2,否则不执行命令2。

使用||时,命令1执行成功后则不执行命令2,否则执行命令2。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2280端口映射到公网,发现经常被暴力破解,自己写了个临时封禁ip功能的脚本,实现5分钟内同一个ip登录密码错误10次就封禁这个ip5分钟,并且进行邮件通知使用步骤openwrt为19.07.03版本,其他版本没有测试过安装bashmsmtpopkg
#!/bin/bashcommand1&command2&wait从Shell脚本并行运行多个程序–杨河老李(kviccn.github.io)
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/phpls-ls 2.编辑修改.bash_profile文件(没有.bash_profile文件的情况下回自动创建)sudovim~/.bash_profile在文件的最后输入以下信息,然后保存退出exportPATH="/Applications/MAMP/bin/php/php7.2.20/b
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修改:然后添加中文支持: locale-genzh_CN.UTF-8临时修改> export LC_ALL='zh_CN.utf8'> locale永久
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexadecimalbash2#[0~1]0[0~7]0x[0~f]or0X[0~f]perl0b[0~1]0[0~7]0x[0~f]tcl0b[0~1]0o[0~7]0x[0~f]bashdifferentbaserepresntationreference2.StringlengthLanguageStr
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全命令补全方法:yum-yinstallbash-completionsource/usr/share/bash-completion/bash_completionsource<(kubectlcompletionbash)echo"source<(kubectlcompletionbash)">>~/.bashrc 
参考这里启动jar包shell脚本修改过来的#!/bin/bash#默认应用名称defaultAppName='./gadmin'appName=''if[[$1&&$1!=0]]thenappName=$1elseappName=$defaultAppNamefiecho">>>>>>本次重启的应用:$appName<
#一个数字的行#!/bin/bashwhilereadlinedon=`echo$line|sed's/[^0-9]//g'|wc-L`if[$n-eq1]thenecho$linefidone<1.txt#日志切割归档#!/bin/bashcd/data/logslog=1.logmv_log(){[-f$1]&&mv$1$2
#文件增加内容#!/bin/bashn=0cat1.txt|whilereadlinedon=[$n+1]if[$n-eq5]thenecho$lineecho-e"#Thisisatestfile.\n#Testinsertlineintothisfile."elseecho$linefidone#备份/etc目录#
# su - oraclesu: /usr/bin/ksh: No such file or directory根据报错信息:显示无法找到文件 /usr/bin/ksh果然没有该文件,但是发现存在文件/bin/ksh,于是创建了一个软连接,可以规避问题,可以成功切换到用户下,但无法执行系统自带命令。$. .bash_profile-ksh: .: .b
history显示历史指令记录内容,下达历史纪录中的指令主要的使用方法如果你想禁用history,可以将HISTSIZE设置为0:#exportHISTSIZE=0使用HISTIGNORE忽略历史中的特定命令下面的例子,将忽略pwd、ls、ls-ltr等命令:#exportHISTIGNORE=”pwd:ls:ls-ltr:”使用HIS
一.命令历史  1.history环境变量:    HISTSIZE:输出的命令历史条数,如history的记录数    HISTFILESIZE:~/.bash_history保存的命令历史记录数    HISTFILLE:历史记录的文件路径    HISTCONTROL:     ignorespace:忽略以空格开头的命令
之前在网上看到很多师傅们总结的linux反弹shell的一些方法,为了更熟练的去运用这些技术,于是自己花精力查了很多资料去理解这些命令的含义,将研究的成果记录在这里,所谓的反弹shell,指的是我们在自己的机器上开启监听,然后在被攻击者的机器上发送连接请求去连接我们的机器,将被攻击者的she
BashOne-LinersExplained,PartI:Workingwithfileshttps://catonmat.net/bash-one-liners-explained-part-oneBashOne-LinersExplained,PartII:Workingwithstringshttps://catonmat.net/bash-one-liners-explained-part-twoBashOne-LinersExplained,PartII
Shell中变量的作用域:在当前Shell会话中使用,全局变量。在函数内部使用,局部变量。可以在其他Shell会话中使用,环境变量。局部变量:默认情况下函数内的变量也是全局变量#!/bin/bashfunctionfunc(){a=99}funcecho$a输出>>99为了让全局变量变成局部变量
1、多命令顺序执行;  命令1;命令2  多个命令顺序执行,命令之间没有任何逻辑联系&&  命令1&&命令2  逻辑与,当命令1正确执行,才会执行命令2||  命令1||命令2  逻辑或,当命令1执行不正确,才会执行命令2例如:ls;date;cd/home/lsx;pwd;who ddif=输入文件of=输
原博文使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗?首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang"。Linux执行文件时发现这个格式,会把!后的内容提取出来拼接在脚本文件或路径之前,当作实际执行的命令。 Shebang这个符号通常在Unix系统的脚本
1、历史命令history[选项][历史命令保存文件]选项:-c:  清空历史命令-w:  把缓存中的历史命令写入历史命令保存文件 ~/.bash_historyvim/etc/profile中的Histsize可改存储历史命令数量历史命令的调用使用上、下箭头调用以前的历史命令使用“!n”重复执行第n条历史
目录1.Shell脚本规范2.Shell脚本执行3.Shell脚本变量3.1环境变量3.1.1自定义环境变量3.1.2显示与取消环境变量3.1.3环境变量初始化与对应文件的生效顺序3.2普通变量3.2.1定义本地变量3.2.2shell调用变量3.2.3grep调用变量3.2.4awk调用变量3.3
   http://www.voidcn.com/blog/wszzdanm/article/p-6145895.html命令功能:显示登录用户的信息命令格式:常用选项:举例:w显示已经登录的用户及正在进行的操作[root@localhost~]#w 11:22:01up4days,21:22, 3users, loadaverage:0.00,0.00,0.00USER