linux基础

来源:互联网 发布:网络真人赌博软件开发 编辑:程序博客网 时间:2024/06/07 01:25

文本处理命令

tr 命令可以用来删除一段文本信息中的某些文字,或者将其转换

echo 'hello shiyanlou' | tr -d'olh'去掉所有的olh

echo'hello' | tr-s'l'去掉重复的l保留一个

-d删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配-s去除set1指定的在输入文本中连续并重复的字符col 命令可以将Tab换成对等数量的空格键,或反转这个操作

cat /etc/protocols | col -x | cat -A col -x 将 /etc/protocols 中的 Tab 转换为空格

-xTab转换为空格-h将空格转换为Tab(默认选项)join命令就是用于将两个文件中包含相同内容的那一行合并在一起

$ 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在不对比数据的情况下,简单地将多个文件合并一起,以Tab隔开

$ paste -d ':' file1 file2 file3$ paste-s file1 file2 file3

-d指定合并的分隔符,默认为Tab-s不合并到一行,每个文件为一行cat file1 | tr '\r\n:^M$' '\n:$' | > file2手动完成 dos 文本格式到 UNIX 文本格式的转换

数据流重定向

>将标准输出导向一个文件

>>将标准输出追加到一个文件中

linux的三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)

文件描述符设备文件说明0/dev/stdin标准输入1/dev/stdout标准输出2/dev/stderr标准错误简单重定向

将cat的连续输出(heredoc方式)重定向到一个文件

$ mkdir Documents

$ cat > Documents/test.c <<EOF

#include<stdio.h>

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 将输出重定向到文件之外也需要将信息打印在终端

永久重定向

# 先开启一个子 Shell
$ zsh
# 使用exec替换当前进程的重定向,将标准输出重定向到一个文件
$ exec 1>somefile
# 后面你执行的命令的输出都将被重定向到文件中,直到你退出当前子shell,或取消exec的重定向
$ ls$ exit$ cat somefile

创建输出文件描述符

cd /dev/fd/;ls -Al 查看当前 Shell 进程中打开的文件描述符
使用exec可以创建新的文件描述符
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -

关闭文件描述符

exec 3>&-

完全屏蔽命令的输出

在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。
cat Documents/test.c nefile 1>/dev/null2>&1 可以利用设个/dev/null屏蔽命令的输出

使用 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(这里体验了范围,?将圆括号内容作为一个整体匹配)。

语法(部分)

\ 将下一个字符记为特殊字符或者是原义字符
^ 匹配字符开始位置
$ 匹配字符结束位置
* 等价于{0}
+ 等价于{1,}
等价于{0,1}
x|y 匹配x或者y
[xyz] 匹配所包含的任意一个字符
[^xyz]匹配未列出字符
[a-z]匹配指定范围内任意字符
优先级
优先级为从上到下从左到右,依次降低:
运算符说明\转义符(), (?:), (?=), []括号和中括号*、+、?、{n}、{n,}、{n,m}限定符^、$、\任何元字符定位点和序列|选择grep命令
用于打印输出文本中匹配的模式串,它使用正则表达式作为模式匹配的条件
grep支持三中正则表达式引擎

参数说明-EPOSIX扩展正则表达式,ERE-GPOSIX基本正则表达式,BRE-PPerl正则表达式,PCRE使用基本正则表达式,BRE

位置

查找/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软件包
  • 从二进制软件包安装
  • 从源代码编译安装
ubuntu是基于debian的发行版,它使用的工具是debian的包管理工具dpkg

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……软件搜索

使用dpkg安装deb软件包

$ cp /var/cache/apt/archives/emacs24_24.3+1-4ubuntu1_amd64.deb ~
# 安装之前参看deb包的信息
$ sudo dpkg -I emacs24_24.3+1-4ubuntu1_amd64.deb
# 使用dpkg安装
$ sudo dpkg -i emacs24_24.3+1-4ubuntu1_amd64.deb

查看已安装软件包的安装目录

sudo dpkg -L emacs

原创粉丝点击