当前位置: 移动技术网 > 科技>操作系统>Unix > unix系统高手的操作习惯

unix系统高手的操作习惯

2018年03月10日  | 移动技术网科技  | 我要评论

这实际上只是您使用 curl 命令可以完成的操作的提示。您只需在命令提示符处键入 man curl 显示 curl 命令的完整使用信息,就可以开始了解更多内容。

最有效地利用正则表达式

大量 unix 命令使用正则表达式作为参数。从技术角度而言,正则表达式 是表示某种模式的字符串(也就是说,由字母、数字和符号组成的字符序列),用于定义零或更长的字符串。正则表达式使用元字符(例如,星号 [*] 和问号 [?])来匹配其他字符串的部分或全部内容。正则表达式不一定包含通配符,但通配符可以使正则表达式在搜索模式和处理文件时发挥更大的作用。表 1 显示了一些基本正则表达式序列。


表 1. 正则表达式序列

序列 说明
脱字符 (^) 匹配出现在行首的表达式,例如 ^a
美元符号 ($) 匹配出现在行末的表达式,例如 a$
反斜杠 (\) 取消下一个字符的特殊含义,例如 \^
方括号 ([]) 匹配括起来的任一字符,例如 [aeiou](使用连字符 [-] 表示范围,例如 [0-9])。
[^ ] 匹配除括起来字符以外的任一字符,例如 [^0-9]
句点 (.) 匹配除行尾之外的任意单个字符
星号 (*) 匹配零个或多个前驱字符或表达式
\{x,y\} 匹配出现过 xy 个和前面相同的内容
\{x\} 精确匹配出现过 x 个和前面相同的内容
\{x,\} 匹配出现过 x 个或更多和前面相同的内容

清单 12 显示了与 grep 命令一起使用的一些基本正则表达式。


清单 12. 使用正则表达式和 grep

                
$ # lists your mail
$ grep '^from: ' /usr/mail/$user
$ # any line with at least one letter
$ grep '[a-za-z]' search-file.txt
$ # anything not a letter or number
$ grep '[^a-za-z0-9] search-file.txt
$ # find phone numbers in the form 999-9999
$ grep '[0-9]\{3\}-[0-9]\{4\}' search-file.txt
$ # find lines with exactly one character
$ grep '^.$' search-file.txt
$ # find any line that starts with a period "."
$ grep '^\.' search-file.txt
$ # find lines that start with a "." and 2 lowercase letters
$ grep '^\.[a-z][a-z]' search-file.txt

 

有大量书籍专门讲述正则表达式。有关命令行正则表达式的深入描述,建议您阅读 developerworks 文章“对话 unix,第 9 部分:正则表达式。”

确定当前用户

有时,您可能希望确定某个特定用户是否运行过您的管理脚本。为找出答案,您可以使用 whoami 命令来返回当前用户的名称。清单 13 显示了独自运行的 whoami 命令;清单 14 显示了使用 whoami 确保当前用户不是根用户的 bash 脚本的摘录。


清单 13. 从命令行使用 whoami

                
$ whoami
john


清单 14. 在脚本中使用 whoami
                
if [ $(whoami) = "root" ]
then
echo "you cannot run this script as root."
exit 1
fi

 

使用 awk 处理数据

awk 命令似乎始终处在 perl 的阴影下,但它对于简单、基于命令行的数据处理来说是一个快速、实用的工具。清单 15 显示了如何开始使用 awk 命令。若要获取文件中每行文本的长度,请使用 length() 函数。若要查看字符串 ing 是否出现在文件文本中,请使用 index() 函数,该函数返回 ing 首次出现的位置,这样您就可以使用它来进行进一步的字符串处理。若要 tokenize(也就是说,将一行拆分为单词长度的片段)某个字符串,请使用 split() 函数。


清单 15. 基本 awk 处理

                
$ cat text
testing the awk command
$ awk '{ i = length($0); print i }' text
23
$ awk '{ i = index($0,”ing”); print i}' text
5
$ awk 'begin { i = 1 } { n = split($0,a," "); while (i <= n) {print a[i]; i++;} }' text
testing
the
awk
command

 

打印文本文件中的指定字段是一项简单的 awk 任务。在清单 16 中,sales 文件包含每个销售人员的姓名,后跟每月销售数字。您可以使用 awk 命令来快速获得每个月的销售总额。缺省情况下,awk 将每个以逗号分隔的值视为不同的字段。您使用 $n 操作符来访问每个字段。


清单 16. 使用 awk 对数据进行汇总

                
$cat sales
gene,12,23,7
dawn,10,25,15
renee,15,13,18
david,8,21,17
$ awk -f, '{print $1,$2+$3+$4}' sales
gene 42
dawn 50
renee 46
david 46

 

awk 命令可以很复杂并应用于广泛的情景中。若要更完整地学习 awk 命令,请从命令 man awk 开始,并参阅参考资料部分提供的资源。

结束语

成为命令行高手需要进行一些实践。按照相同的方式处理问题很简单,因为您已经习惯了。扩展您的命令行资源可以显著提高您的工作效率,并促使您朝着 unix 命令行高手的方向前进!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网