文本处理命令
tr 命令可以用来删除一段文本信息中的某些文字,或者将其转换
echo 'hello shiyanlou' | tr -d'olh'去掉所有的olh
echo'hello' | tr-s'l'去掉重复的l保留一个
-d | 删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配 |
-s | 去除set1指定的在输入文本中连续并重复的字符 |
cat /etc/protocols | col -x | cat -A col -x 将 /etc/protocols 中的 Tab 转换为空格
-x | 将Tab转换为空格 |
-h | 将空格转换为Tab(默认选项) |
$ echo '1 hello' > file1$ echo'1 shiyanlou' > file2$ join file1 file2
sudo join -t':' /etc/passwd /etc/shadow将/etc/passwd与/etc/group两个文件合并,指定以':'作为分隔符
-t | 指定分隔符,默认为空格 |
-i | 忽略大小写的差异 |
-1 | 指明第一个文件要用哪个字段来对比,默认对比第一个字段 |
-2 | 指明第二个文件要用哪个字段来对比,默认对比第一个字段 |
$ paste -d ':' file1 file2 file3$ paste-s file1 file2 file3
-d | 指定合并的分隔符,默认为Tab |
-s | 不合并到一行,每个文件为一行 |
数据流重定向
>将标准输出导向一个文件
>>将标准输出追加到一个文件中
linux的三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)
文件描述符 | 设备文件 | 说明 |
---|---|---|
0 | /dev/stdin | 标准输入 |
1 | /dev/stdout | 标准输出 |
2 | /dev/stderr | 标准错误 |
将cat的连续输出(heredoc方式)重定向到一个文件
$ mkdir Documents
$ cat > Documents/test.c <<EOF
intmain(){
printf("hello world\n");
return 0;}
EOF
cat Documents/test.c 将一个文件作为命令的输入,标准输出作为命令的输出
echo 'hi' | cat 将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出
区别:管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接
标准错误重定向
cat Documents/test.c hello.c 包含了标准输出和错误输出
cat Documents/test.c hello.c > somefile 重定向到文件,但是还是输出了错误信息
cat Documents/test.c hello.c >somefile 2>&1采用文件描述符重定向标准输出,或者cat Documents/test.c hello.c &>somefilehell
使用tee命令同时重定向到多个文件
echo 'hello shiyanlou' | tee hello 将输出重定向到文件之外也需要将信息打印在终端永久重定向
创建输出文件描述符
关闭文件描述符
exec 3>&-完全屏蔽命令的输出
在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。使用 xargs 分割参数列表
xargs 是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题cut -d: -f1 < /etc/passwd | sort | xargsecho 这个命令用于将/etc/passwd文件按:分割取第一个字段排序后,使用echo命令生成一个列表
对文件data1中的文本进行统计
cat data1| cut -c 8- | cut -d ' ' -f 1 | sort | uniq -dc | sort -t ' ' -k 1 -n -r| head -3 >/home/shiyanlou/result
正则表达式基础
Regular Expression,在代码中常简写为 regex、regexp 或 RE。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。(区分正则表达式核通配符)
基本语法:
选择
|竖直分隔符表示选择,例如"boy|girl"可以匹配"boy"或者"girl"
数量限定
数量限定除了我们举例用的*,还有+加号,?问号,如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:
- +表示前面的字符必须出现至少一次(1次或多次),例如,"goo+gle",可以匹配"gooogle","goooogle"等;
- ?表示前面的字符最多出现一次(0次或1次),例如,"colou?r",可以匹配"color"或者"colour";
- *星号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次),例如,“0*42”可以匹配42、042、0042、00042等。
范围和优先级
()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择a或者e而不是gra和ey),"(grand)?father"匹配father和grandfather(这里体验了范围, ?将圆括号内容作为一个整体匹配)。语法(部分)
运算符 | 说明 |
---|---|
\ | 转义符 |
(), (?:), (?=), [] | 括号和中括号 |
*、+、?、{n}、{n,}、{n,m} | 限定符 |
^、$、\任何元字符 | 定位点和序列 |
| | 选择 |
参数 | 说明 |
---|---|
-E | POSIX扩展正则表达式,ERE |
-G | POSIX基本正则表达式,BRE |
-P | Perl正则表达式,PCRE |
位置
查找/etc/group文件中以"shiyanlou"为开头的行
$ grep 'shiyanlou' /etc/group$ grep'^shiyanlou' /etc/group
数量
# 将匹配以'z'开头以'o'结尾的所有字符串
$ echo 'zero\nzo\nzoo' | grep 'z.*o'
# 将匹配以'z'开头以'o'结尾,中间包含一个任意字符的字符串
$ echo 'zero\nzo\nzoo' | grep 'z.o'
# 将匹配以'z'开头,以任意多个'o'结尾的字符串
$ echo 'zero\nzo\nzoo' | grep 'zo*'
选择
# grep默认是区分大小写的,这里将匹配所有的小写字母
$ echo '1234\nabcd' | grep '[a-z]'
# 将匹配所有的数字
$ echo '1234\nabcd' | grep '[0-9]'
要通过grep使用扩展正则表达式需要加上-E参数,或使用egrep
数量
# 只匹配"zo"
$echo'zero\nzo\nzoo' | grep -E 'zo{1}'
# 匹配以"zo"开头的所有单词
$echo'zero\nzo\nzoo' | grep -E 'zo{1,}'
选择
# 匹配"www.shiyanlou.com"和"www.google.com"
$echo'www.shiyanlou.com\nwww.baidu.com\nwww.google.com' | grep -E'www\.(shiyanlou|google)\.com'
sed流编辑器
在 Linux/UNIX 的世界里敢称为编辑器的工具,大都非等闲之辈,比如前面的"vi/vim(编辑器之神)","emacs(神的编辑器)","gedit"这些个编辑器。sed与上述的最大不同之处在于它是一个非交互式的编辑器
sed -i'1s/sad/happy/'test# 表示将test文件中第一行的"sad"替换为"happy"
awk文本处理语言
使用awk将文本内容打印到终端(NR表示当前读入的记录数)
$ awk '{
> if(NR==1){
> print $1 "\n" $2 "\n" $3
> } else {
> print}
> }' test
awk命令匹配数字和字符
awk '/[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+/' data2 > ../mail
awk '/^[0-9].*/' data2 > ../num
linux的软件安装
- 在线安装
- 从磁盘安装deb软件包
- 从二进制软件包安装
- 从源代码编译安装
APT是Advance Packaging Tool(高级包装工具)的缩写,是Debian及其派生发行版的软件包管理器,APT可以自动下载,配置,安装二进制或者源代码格式的软件包
apt-get 是用于处理 apt包的公用程序集,我们可以用它来在线安装、卸载和升级软件包等
apt-get install <软件包名>
sudo apt-get --reinstall install w3m重新安装
sudo apt-get update更新软件源
sudo apt-get dist-upgrade升级并解决依赖关系
$ sudo apt-get purge w3m
sudo apt-get --purge remove
$ sudo apt-get autoremove
sudo apt-cachesearch softname1 softname2 softname3……软件搜索