首页 > 大数据 > 数据分析 > 面试常用的shell命令汇总
来源:大数据球球
sed -n '10p' jmeter.log
(xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)
grep -E "^\([0-9]{3}) [0-9]{3}-[0-9]{4}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$" file.txt
grep -E "\b[[:alpha:]]+\b" a.txt -o | sort -r | uniq -c| sort -rn
cat words.txt | tr -s ' ' '\n'|sort|uniq -c |sort -r|awk '{print $2" "$1}'
cat words.txt | xargs -n1 | sort | uniq -c
cat ——浏览文件
tr -s ——替换字符串(空格换为换行)保证了一行一个单词
sort ——默认ASCII值排序,排序号后还会有重复
uniq —— 去重,-c再输出重复次数。结果就是 ”4 abc“ abc出现了4次
sort
-r —— 反向排序,也就是从大到小。得到按频率高低的结果;
-n 按照数值比较排序
awk ——格式化输出,规定输出是先字符串再重复次数,所以先$2再$1,中间空格分隔
col=$(wc file.txt | awk '{print $2 / $1}')
for i in `seq 1 $col`
do
awk -v col="$i" '{print $col}' file.txt |xargs
done
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
解答:当我们需要删除文件中的指定行时,‘sed’命令可以用来解决该问题。
这个是用来删除文件头(文件的首行)的正确命令。
sed '1 d' file.txt
上面命令的问题是,它会在标准输出设备上输出不带首行的文件内容。为了保存输出到文件,我们需要使用重定向操作符,它将帮助你将输出重定向到文件。
# sed '1 d' file.txt > new_file.txt
好吧,其实sed命令内建的‘-i’开关就可以干这活,就不需要重定向符了吧。
# sed -i '1 d' file.txt
解答:‘sed’命令也可以用来查找文本文件中的某一行或者检查其长度。
sed -n 'n p' file.txt可以解决,这里n表示行号,‘p’打印出匹配内容(到标准输出),该命令通常与-n命令行选项连用。那么,怎样来获取长度计数呢?很明显,我们需要通过管道输出给‘wc’命令来计算。
# sed –n 'n p' file.txt | wc –c
要得到文本文件‘linuxmi.txt’的第五行的长度,运行如下命令:
# sed -n '5 p' linuxmi.txt | wc -c
解答:可以。可以在Linux中查看所有的非打印字符。要实现上面所讲的方案,我们需要‘vi’编辑器的帮助。怎样在‘vi’编辑器中显示非打印字符?
打开vi编辑器。
先按[esc]键,然后按‘:’进入到vi编辑器的命令模式。
最后,从‘vi’编辑器的命令界面输入set list命令并执行。
注: 这种方式可以查看文本文件中的所有非打印字符,包括ctrl+m(^M)。
解答:这真是个有趣的工作方案。好吧,上面所讲的方案,我们需要通过下面的步骤来实施,这简直就是小菜一碟。
# mkdir dir_xyz
# chmod g+wx dir_xyz
# chmod +t dir_xyz
第一行命令创建了一个目录(dir_xyz),上面的第二行命令让组(g)具有‘写’和‘执行’的权限,而上面的最后一行命令——权限位最后的‘+t’是‘粘滞位’,它用来替换‘x’,表明在这个目录中,文件只能被它们的拥有者、目录的拥有者或者是超级用户root删除。
解答:一个Linux进程在它的一生中,通常经历了四个主要阶段。
这里是Linux进程要经历的四个阶段。
等待:Linux进程等待资源。
运行:Linux进程当前正在执行中。
停止:Linux进程在成功执行后或收到杀死进程信号后停止。
僵尸:如果该进程已经结束,但仍然留在进程表中,被称为‘僵尸’。
解答:‘cut’是一个很有用的Linux命令,当我们要截取文件的指定部分并打印到标准输出,当文本区域以及文件本身很大时,这个命令很有用。
例如,截取txt_linuxmi文件的前10列。
# cut -c1-10 txt_linuxmi
要截取该文件中的第二,第五和第七列。
# cut -d;-f2 -f5 -f7 txt_linuxmi
解答:‘cmp’和‘diff’命令用来获取相同的东西,但各有侧重。
‘diff’命令输出为了使两个文件一样而应该做的修改。而‘cmp’命令则将两个文件逐字节对比,并报告第一个不匹配的项。
解答:可以的。‘ls’命令可以用‘echo’命令来替代。‘ls’命令列出目录内容,从替换上述命令的角度讲,我们可以使用‘echo *’,两个命令的输出完全一样。
解答:‘inode’是一个‘数据结构’,在Linux上用于文件标识。每个文件在Unix系统上有一个独立的‘inode’和一个‘唯一的’inode号。
让我们从最简单的用法开始。要按特定名称搜索文件,命令如下:
find.-nametest.txt
如何查找所有格式为 pdf 的书籍?使用正则表达式:
find./yang/books-name"*.pdf"
默认情况下,find 命令会搜索常规文件,但最好进行指定(-type f)以使所有内容更清晰:
find./yang/books-typef-name"*.pdf"
除了搜索常规文件外,我们还可以通过指定-type选项来搜索其他类型的文件。
例如目录:
find.-typed-name"yang*"
或者符号链接:
find.-typel-name"yang*"
要按指定的时间戳搜索文件,我们需要知道 Linux 系统中的 3 个不同的时间戳:
访问时间戳(atime):最后一次读取文件的时间。**修改时间戳 (mtime)**:文件内容最后一次被修改的时间。**更改时间戳 (ctime)**:上次更改文件元数据的时间(如,所有权、位置、文件类型和权限设置) 所以,正如开头提到的面试题,要搜索atime超过一年的文件,我们可以编写如下命令:
find.-typef-atime+365
如果我们需要查找mtime正好是 5 天前的文件,请不要包含+,因为它的意思是“大于”。
find.-typef-mtime5
显然,+表示“大于”,-表示“小于”。所以我们可以搜索ctime在 5~10 天前的文件:
find.-typef-ctime+5-ctime-10
-size选项使我们能够按指定大小查找文件。我们可以将其计量单位指定为以下约定:
b:512 字节块(默认)
c:字节
w:双字节字
k:KB
M:MB
G:GB
类似于按时间戳查找文件,+表示“大于”,-表示“小于”。例如,要查找大小为 10 MB ~ 1 GB 的文件:
find.-typef-size+10M-size-1G
合理控制文件的权限是 Linux 管理员的一项重要任务。find命令的-perm选项可以帮助我们按指定权限查找文件:
find.-typef-perm777
例如,上面的命令会搜索所有具有 777 权限的文件,这意味着一个文件对其持有者、组和所有用户具有所有的读、写和可执行权限。
这个任务很简单。我们可以使用-user选项指定用户名。例如,以下命令将查找所有属于yang的文件:
find-typef-useryang
在大多数情况下,我们希望在找到我们需要的文件后进行后续操作。例如将其删除,或检查它们的详细信息等等。-exec命令使这些所有事情变得更加容易。
现在,要了解如何使用它,让我们回到之前提到的面试问题:
find.-typef-atime+365-execrm-rf{}\;
上述命令在-exec选项后是rm -rf,其用于删除文件。{}是用于查找结果的占位符。
注意:占位符{}非常重要,尤其是在您想删除文件时。因为,如果您不使用它,该命令将对所有文件执行(而不是您刚刚通过 find 命令找到的文件)。
做一个尝试,请在终端上执行以下两个命令,并检查它们的结果有何不同:
一个使用占位符:
find.-typef-atime+5-execls{}\;
另一个不使用:
find.-typef-atime+5-execls\;
-exec 选项后面的命令必须以分号(;)结束。众所周知,转义字符用于去除单个字符的特殊含义。在 Linux 中,反斜杠\用作转义字符。所以我们将它用于分号字符。
看完find命令的 7 种用法后,开始提到的面试题现在好像很容易解决了。你现在可以直接写下它的答案并将其解释清楚吗?
find.-typef-atime+365-execrm-rf{}\;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70027827/viewspace-2998904/ ,如需转载,请注明出处,否则将追究法律责任。