shell中的cut命令
cut是以每一行为一个处理对象的,这种机制和sed是一样的。(关于sed的入门文章将在近期发布)
2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要是接受三个定位方法:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f
3 以“字节”定位,给个最简单的例子?
举个例子吧,当你执行ps命令时,会输出类似如下的内容:
[rocrocket@rocrocket programming]$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
如果我们想提取每一行的第3个字节,就这样:
[rocrocket@rocrocket programming]$ who|cut -b 3
c
c
c
看明白了吧,-b后面可以设定要提取哪一个字节,其实-b和3之间没有空格也是可以的,但推荐有空格:)
4 如果“字节”定位中,我想提取第3,第4、第5和第8个字节,怎么办? -b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了。看看例子吧:
[rocrocket@rocrocket programming]$ who|cut -b 3-5,8
croe
croe
croe
但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。这个例子就可以说明这个问题:
[rocrocket@rocrocket programming]$ who|cut -b 8,3-5
croe
croe
croe
5 还有哪些类似“3-5”这样的小技巧,列举一下吧!
[rocrocket@rocrocket programming]$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
[rocrocket@rocrocket programming]$ who|cut -b -3
roc
roc
roc
[rocrocket@rocrocket programming]$ who|cut -b 3-
crocket :0 2009-01-08 11:07
crocket pts/0 2009-01-08 11:23 (:0.0)
crocket pts/1 2009-01-08 14:15 (:0.0)
想必你也看到了,-3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节“c”。
如果我执行who|cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的c的。看:
[rocrocket@rocrocket programming]$ who|cut -b -3,3-
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
6 给个以字符为定位标志的最简单的例子吧!
下面例子你似曾相识,提取第3,第4,第5和第8个字符:
[rocrocket@rocrocket programming]$ who|cut -c 3-5,8
croe
croe
croe
不过,看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然,看似相同,只是因为这个例子举的不好,who输出的都是单字节字符,所以用-b和-c没有区别,如果你提取中文,区别就看出来了,来,看看中文提取的情况:
[rocrocket@rocrocket programming]$ cat cut_ch.txt
星期一
星期二
星期三
星期四
[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt
?
?
?
?
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt
一
二
三
四
看到了吧,用-c则会以字符为单位,输出正常;而-b只会傻傻的以字节(8位二进制位)来计算,输出就是乱码。
既然提到了这个知识点,就再补充一句,如果你学有余力,就提高一下。
当遇到多字节字符时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。例子如下:
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2
?
?
?
?
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2
[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3
星
星
星
星
6 域是怎么回事呢?解释解释:)
为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。
(下面的讲解内容是在假设你对/etc/passwd文件的内容和组织形式比较了解的情况下进行的。)
如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。
我们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!
以/etc/passwd的前五行内容为例:
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1
root
bin
daemon
adm
lp
看到了吧,用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了!呵呵有成就感吧!
当然,在设定-f时,也可以使用例如3-5或者4-类似的格式:
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5 root:0:0:root
bin:1:1:bin
daemon:2:2:daemon
adm:3:4:adm
lp:4:7:lp
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7 root:0:0:root:/bin/bash
bin:1:1:bin:/sbin/nologin
daemon:2:2:daemon:/sbin/nologin
adm:3:4:adm:/sbin/nologin
lp:4:7:lp:/sbin/nologin
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f -2
root:x
bin:x
daemon:x
adm:x
lp:x
7 如果遇到空格和制表符时,怎么分辨呢?我觉得有点乱,怎么办?
有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。
[rocrocket@rocrocket programming]$ cat tab_space.txt
this is tab finish.
this is several space finish.
[rocrocket@rocrocket programming]$ sed -n l tab_space.txt
this is tab\tfinish.$
this is several space finish.$
看到了吧,如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。
通过此方法即可以判断制表符和空格了。
注意,上面sed -n后面的字符是L的小写字母哦,不要看错。(字母l、数字1还有或运算|真是难分辨啊…,看来这三个比制表符还难分辨…)
8 我应该在cut -d中用什么符号来设定制表符或空格呢?
悄悄的告诉你,cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了!放心,相信我!
如果你设定一个空格为间隔符,那么就这样:
[rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1
this
this
注意,两个单引号之间可确实要有一个空格哦,不能偷懒。
而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。
[rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1
cut: the delimiter must be a single character
Try `cut --help' for more information.
9 我想将ps和cut命令配合使用时,怎么总是在最后两行出现重复现象? 这个问题的具体描述是如下这样的。
当cut和ps配合时:
[rocrocket@rocrocket programming]$ ps
PID TTY TIME CMD
2977 pts/0 00:00:00 bash
5032 pts/0 00:00:00 ps
[rocrocket@rocrocket programming]$ ps|cut -b3
P
9
看,最后的0重复了两次!!而且,我也试过ps ef或ps aux均有此问题。 而当ps和其他命令配合时,均无此问题,例如cut和who配合则正常:
[rocrocket@rocrocket programming]$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
[rocrocket@rocrocket programming]$ who|cut -b3
c
c
c
这个看似怪异的令我百思不得其解的问题,得到了sunway的解答,在此非常感谢他。我发问的原帖地址在[此处]。
其实这个问题是这样的,ps|cut会自身创建一个进程,所以当ps时也会提取出这个进程,然后通过管道输出到cut,所以cut截取后,就多出了一行,之所以会重复上一行内容,是由于我们恰巧取到了和上一行内容相同的字符而已。
你测试下执行ps和ps|cat就知道原因了!:)
10 cut有哪些缺陷和不足?
猜出来了吧?对,就是在处理多空格时。
如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容
第二篇:Shell基本命令
Shell基本命令
几个基本的shell命令,用ssh管理主机必备。
1.ls 列出目录下的文件,不同类型的文件颜色不同,例如蓝色是文件夹,白色是文件
[root@restoretmp steph]# ls
file.html public_html test
[root@restoretmp steph]#
参数:
ls -a 列出所有文件,包括隐藏文件
[root@restoretmp steph]# ls -a
. .. .bash_logout .bash_profile .bashrc file.html public_html test
[root@restoretmp steph]#
ls -l 列出所有者 size 文件权限 修改日期
ls -R 递归列出所有子目录的内容
2. cd 转移目录
cd /home/steph 将转移到/home/steph
cd .. 上移一个目录
cd 回到根目录
3. 建立新文件和文件夹
touch new-filename 建立新文件
mkdir new-directory 建立新目录
4.删除文件和目录
rm filename 删除名为 filename的文件
rmdir foldername 删除名为foldername的目录
5.修改文件夹权限
chmod 755 foldername 将把名为foldername的文件夹的权限修改为755
6.修改用户
chown steph:steph file.html 把file.html的用户修改为steph:steph
2. 压缩和解压缩文件
gzip 和 gunzip
压缩:
gzip filename
文件即会被压缩,并被保存为 filename.gz
解压缩:
gunzip filename.gz
filename.gz 会被删除,而继之以 filename
可以通过命令man gip 和man gunzip获得命令的详细说明.
zip 和 unzip
要使用 zip 来压缩文件,在 shell 提示下键入下面的命令:
zip -r filename.zip filesdir
在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。
要解压缩 zip 文件的内容,键入以下命令:
unzip filename.zip
你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:
zip -r filename.zip file1 file2 file3 /usr/work/school
上面的命令把 file1、file2、 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。
运行FTP Wget实现上传下载
1. 用FTP将服务器上的文件上传到其他服务器
[root]$ ftp /*启用FTP客户端
ftp> open 202.103.1.2 /*打开远程服务器IP
Connected to 202.103.1.2.
220 ProFTPD 1.2.9 Server ready.
Name (218.93.205.112:qqroot): user /*输入用户名
331 Password required for oran.
Password: /*输入密码
230 User oran logged in.
put idcspy.tar.gz idcspy.tar.gz
/*这是关键,put是上传命令,第一个idcspy.tar.gz是本地文件名,第二个是远程文件名。。意思就是把本地的idcspy.tar.gz上传到远程FTP里,并且命名为idcspy.tar.gz这样,SSH就可以自己上传了。你就可以做别的事情了。
2. Wget下载文件
使用方法:
wget的使用形式是:
wget [参数列表] URL
首先来介绍一下wget的主要参数:
· -b:让wget在后台运行,记录文件写在当前目录下‖wget-log‖文件中;
· -t [nuber of times]:尝试次数,当wget无法与服务器建立连接时,尝试连接多少次
。比如‖-t
120〃表示尝试120次。当这一项为‖0〃的时候,指定尝试无穷多次直到连接成功为止,这个
设置非常有用,当对方服务器突然关机或者网络突然中断的时候,可以在恢复正常后继续
下载没有传完的文件;
· -c:断点续传,这也是个非常有用的设置,特别当下载比较大的文件的时候,如果中
途意外中断,那么连接恢复的时候会从上次没传完的地方接着传,而不是又从头开始,使
用这一项需要远程服务器也支持断点续传,一般来讲,基于UNIX/Linux的Web/FTP服务器
都支持断点续传;
· -T [number of seconds]:超时时间,指定多长时间远程服务器没有响应就中断连接
,开始下一次尝试。比如‖-T
120〃表示如果120秒以后远程服务器没有发过来数据,就重新尝试连接。如果网络速度比
较快,这个时间可以设置的短些,相反,可以设置的长一些,一般最多不超过900,通常
也不少于60,一般设置在120左右比较合适;
· -w [number of seconds]:在两次尝试之间等待多少秒,比如‖-w 100〃表示两次尝试
之间等待100秒;
· -Y on/off:通过/不通过代理服务器进行连接;
· -Q [byetes]:限制下载文件的总大小最多不能超过多少,比如‖-Q2k‖表示不能超过2K
字节,‖-Q3m‖表示最多不能超过3M字节,如果数字后面什么都不加,就表示是以字节为单
位,比如‖-Q200〃表示最多不能超过200字节;
· -nd:不下载目录结构,把从服务器所有指定目录下载的文件都堆到当前目录里;
· -x:与‖-nd‖设置刚好相反,创建完整的目录结构,例如‖wget -nd
―将创建在当前目录下创建‖‖子目录,然后按照服务器
实际的目录结构一级一级建下去,直到所有的文件都传完为止;
· -nH:不创建以目标主机域名为目录名的目录,将目标主机的目录结构直接下到当前目
录下;
· –http-user=username
· –http-passwd=password:如果Web服务器需要指定用户名和口令,用这两项来设定;
· –proxy-user=username
· –proxy-passwd=password:如果代理服务器需要输入用户名和口令,使用这两个选项
;
· -r:在本机建立服务器端目录结构;
· -l [depth]:下载远程服务器目录结构的深度,例如‖-l 5〃下载目录深度小于或者等
于5以内的目录结构或者文件;
· -m:做站点镜像时的选项,如果你想做一个站点的镜像,使用这个选项,它将自动设
定其他合适的选项以便于站点镜像;
· -np:只下载目标站点指定目录及其子目录的内容。这也是一个非常有用的选项,我们
假设某个人的个人主页里面有一个指向这个站点其他人个人主页的连接,而我们只想下载
这个人的个人主页,如果不设置这个选项,甚至–有可能把整个站点给抓下来,这显然是
我们通常不希望的;
ü 如何设定wget所使用的代理服务器
wget可以使用用户设置文件‖.wgetrc‖来读取很多设置,我们这里主要利用这个文件来是
设置代理服务器。使用者用什么用户登录,那么什么用户主目录下的‖.wgetrc‖文件就起
作用。例如,‖root‖用户如果想使用‖.wgetrc‖来设置代理服务器,‖/root/.wgert‖就起
作用,下面给出一个‖.wge
trc‖文件的内容,读者可以参照这个例子来编写自己的‖wgetrc‖文件:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
这两行的含义是,代理服务器IP地址为:111.111.111.111,端口号为:80。第一行指定
HTTP协议所使用的代理服务器,第二行指定FTP协议所使用的代理服务器。
第二篇:
$ wget –help
GNU Wget 1.9.1,非交互式的网络文件下载工具。
用法: wget [选项]… [URL]…
长选项必须用的参数在使用短选项时也是必须的。
启动:
-V, –version 显示 Wget 的版本并且退出。
-h, –help 打印此帮助。
-b, -background 启动后进入后台操作。
-e, -execute=COMMAND 运行?.wgetrc‘形式的命令。
日志记录及输入文件:
-o, –output-file=文件 将日志消息写入到指定文件中。
-a, –append-output=文件 将日志消息追加到指定文件的末端。
-d, –debug 打印调试输出。
-q, –quiet 安静模式(不输出信息)。
-v, –verbose 详细输出模式(默认)。
-nv, –non-verbose 关闭详细输出模式,但不进入安静模式。
-i, –input-file=文件 下载从指定文件中找到的 URL。
-F, –force-html 以 HTML 方式处理输入文件。
-B, –base=URL 使用 -F -i 文件选项时,在相对链接前添加指定的 URL。
下载:
-t, –tries=次数 配置重试次数(0 表示无限)。
–retry-connrefused 即使拒绝连接也重试。
-O –output-document=文件 将数据写入此文件中。
-nc, –no-clobber 不更改已经存在的文件,也不使用在文件名后
添加 .#(# 为数字)的方法写入新的文件。
-c, –continue 继续接收已下载了一部分的文件。
–progress=方式 选择下载进度的表示方式。
-N, –timestamping 除非远程文件较新,否则不再取回。
-S, –server-response 显示服务器回应消息。
–spider 不下载任何数据。
-T, –timeout=秒数 配置读取数据的超时时间 (秒数)。
-w, –wait=秒数 接收不同文件之间等待的秒数。
–waitretry=秒数 在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
–random-wait 接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
-Y, –proxy=on/off 打开或关闭代理服务器。
-Q, –quota=大小 配置接收数据的限额大小。
–bind-address=地址 使用本机的指定地址 (主机名称或 IP) 进行连接。
–limit-rate=速率 限制下载的速率。
–dns-cache=off 禁止查找存于高速缓存中的 DNS。
–restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。
目录:
-nd –no-directories 不创建目录。
-x, –force-directories 强制创建目录。
-nH, –no-host-directories 不创建含有远程主机名称的目录。
-P, –directory-prefix=名称 保存文件前先创建指定名称的目录。
–cut-dirs=数目 忽略远程目录中指定数目的目录层。
HTTP 选项:
–http-user=用户 配置 http 用户名。
–http-passwd=密码 配置 http 用户密码。
-C, –cache=on/off (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
-E, –html-extension 将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
–ignore-length 忽略―Content-Length‖文件头字段。
–header=字符串 在文件头中添加指定字符串。
–proxy-user=用户 配置代理服务器用户名。
–proxy-passwd=密码 配置代理服务器用户密码。
–referer=URL 在 HTTP 请求中包含―Referer:URL‖头。
-s, –save-headers 将 HTTP 头存入文件。
-U, –user-agent=AGENT 标志为 AGENT 而不是 Wget/VERSION。
–no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
–cookies=off 禁用 cookie。
–load-cookies=文件 会话开始前由指定文件载入 cookie。
–save-cookies=文件 会话结束后将 cookie 保存至指定文件。
–post-data=字符串 使用 POST 方法,发送指定字符串。
–post-file=文件 使用 POST 方法,发送指定文件中的内容。
HTTPS (SSL) 选项:
–sslcertfile=文件 可选的客户段端证书。
–sslcertkey=密钥文件 对此证书可选的―密钥文件‖。
–egd-file=文件 EGD socket 文件名。
–sslcadir=目录 CA 散列表所在的目录。
–sslcafile=文件 包含 CA 的文件。
–sslcerttype=0/1 Client-Cert 类型 0=PEM (默认) / 1=ASN1 (DER)
–sslcheckcert=0/1 根据提供的 CA 检查服务器的证书
–sslprotocol=0-3 选择 SSL 协议;0=自动选择,
1=SSLv2 2=SSLv3 3=TLSv1
FTP 选项:
-nr, –dont-remove-listing 不删除―.listing‖文件。
-g, –glob=on/off 设置是否展开有通配符的文件名。
–passive-ftp 使用―被动‖传输模式。
–retr-symlinks 在递归模式中,下载链接所指示的文件(连至目录
则例外)。
递归下载:
-r, –recursive 递归下载。
-l, –level=数字 最大递归深度(inf 或 0 表示无限)。
–delete-after 删除下载后的文件。
-k, –convert-links 将绝对链接转换为相对链接。
-K, –backup-converted 转换文件 X 前先将其备份为 X.orig。
-m, –mirror 等效于 -r -N -l inf -nr 的选项。
-p, –page-requisites 下载所有显示完整网页所需的文件,例如图像。
–strict-comments 打开对 HTML 备注的严格(SGML)处理选项。
递归下载时有关接受/拒绝的选项:
-A, –accept=列表 接受的文件样式列表,以逗号分隔。
-R, –reject=列表 排除的文件样式列表,以逗号分隔。
-D, –domains=列表 接受的域列表,以逗号分隔。
–exclude-domains=列表 排除的域列表,以逗号分隔。
–follow-ftp 跟随 HTML 文件中的 FTP 链接。
–follow-tags=列表 要跟随的 HTML 标记,以逗号分隔。
-G, –ignore-tags=列表 要忽略的 HTML 标记,以逗号分隔。
-H, –span-hosts 递归时可进入其它主机。
-L, –relative 只跟随相对链接。
-I, –include-directories=列表 要下载的目录列表。
-X, –exclude-directories=列表 要排除的目录列表。
-np, –no-parent 不搜索上层目录。
一个讲解的不错的Wget说明
wget是一个命令行工具,用于批量下载文件,支持HTTP和FTP。究竟比其他的工具好在哪里?看看内容吧
wget基本上所有的Linux版本都自己带了,但是有多少人在用呢?呵呵,如果你没有用过,不妨试试。Windows下面的用户可以使用GNUwin32的项目,wget,基本功能完全一致。好吧,我们来以几个简单的例子看看wget的威力。
如果我们想下载ftp里面某个目录里面的所有文件,我们也可以不用ftp这个笨蛋,呵呵,可以享受cute ftp等图形化工具的拖一个目录的轻松了。如 wget -r ftp://10.8.8.8/movie/
呵呵,等吧!下完了,发觉有些不对劲,怎么出来个10.8.8.8的目录,进去看看,又是一个movie,哦,wget将目录结构和网站标题都给记录下来了,不要??没有问题!比如说还是这个例子
wget -r -nd ftp://10.8.8.8/movie/
结果什么目录都没有了,faint!怎么会这样?呵呵,你如果想要这样就让它这样吧,否则使用
wget -r -nH ftp://10.8.8.8/movie/
恩?movie也不要?OK,那就这样
wget -r -nH –cut-dirs=1 ftp://10.8.8.8/movie/
这有什么用啊?cuteftp比他好用多了,而且,你这断了线能连吗?呵呵,不好意思,可以连
wget -c -r -nH –cut-dirs=1 ftp://10.8.8.8/movie/
但是cuteftp能做下面的事情吗?比如,现在很多网站使用Apache建站,并不提供ftp服务,但是Apache有一个indexing功能,可以 提供一个类似于ftp的界面,好多文件我想下啊,怎么办?由于是HTTP协议,CuteFTP无能为力了,倒是flash get等有什么get all这种功能,不知道他们对于目录处理怎么样。但是wget一点问题都没有,不信?我们拿CTAN为例(例子并不恰当,CTAN有FTP服务),我们下 载这里面所有的宏包,呵呵
wget -r -k /tex-archive/macros/latex/
-k表示将连接转换为本地连接。但是现在同样有上面的问题啊,那就把你需要的加上吧,另外也许你根本不需要向下走那么多层,比如,我们就要到第二层,那么
wget -r -l2 -k /tex-archive/macros/latex/
现在新的问题是,由于网页有一个排序功能,很讨厌,因为下载的时候把网页重复了好多次,那么我们可使用-A和-R开关控制下载类型,并且可以使用通配符,呵呵,现在随心所欲了吧
wget -r -R ―.htm\?*‖ -k /tex-archive/macros/latex/
这次没有那种网页了吧?-R的意义在于拒绝下载匹配类型的文件,-A表示仅仅接受的文件类型,如-A ―*.gif‖将仅下载gif图片,如果有多个允许或者不允许,可以使用,分开。
那么,我们现在在使用代理服务器,怎么办呢?呵呵,很高兴你选择了wget,你可以使用它的配置文件,环境变量来利用代理。这里推荐使用环境变量,如在 bash里面我们可以把天天用的proxy加到.bash_profile里面,这是Linux标准写法(很多软件都用的,什么apt-get,yum等 等)
export http_proxy=http://10.20.30.40:8080
然后,proxy就默认打开了,如果需要暂时关闭,可以使用
wget –proxy=off -r -k /tex-archive/macros/latex/
当然,写一个.wgetrc文件也可以,该文件可以从/usr/local/etc里面找到,里面有很详细的注释,我就不多说了。
下载网页的时候比较麻烦的事情是,有的网页被同时指向了很多遍,那么为了避免多次下载,我们使用
wget -nc -r -k /tex-archive/macros/latex/
可以避免这件事情。为了不被有的连接指向非
/tex-archive/macros/latex/内层目录,我们还应该加上 wget -nc -np -r -k /tex-archive/macros/latex/
避免下载非该目录里面的文件,这也避免了到不同的host上面去。当然,如果你希望有这个功能,在多个host之间跳来跳去的下载,可以使用
wget -nc -np -H -r -k /tex-archive/macros/latex/
使得可以在多个host之间span,同时-I和-X可以使得我们仅仅跟踪某些目录或者不跟踪某些目录。如果某些HTML里面你需要的东西不是由<a>这种东西作出来的,你就得使用–follow-tags和–ignore-tags了。
嘿,我有个文件里面都是连接,怎么办?要是不是html你只需要
wget -i your.file
如果是,那也不繁
wget -F -i your.file
Vi指令大全—-编辑文件
进入vi的命令
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename: 打开文件,并将光标置于第n行首
vi + filename: 打开文件,并将光标置于最后一行首
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename: 打开多个文件,依次进行编辑
移动光标类命令
h: 光标左移一个字符
l: 光标右移一个字符
space: 光标右移一个字符
Backspace: 光标左移一个字符
k或Ctrl+p: 光标上移一行
j或Ctrl+n: 光标下移一行
Enter: 光标下移一行
w或W : 光标右移一个字至字首
b或B : 光标左移一个字至字首
e或E : 光标右移一个字至字尾
): 光标移至句尾
(: 光标移至句首
}: 光标移至段落开头
{: 光标移至段落结尾
nG: 光标移至第n行首
n+: 光标下移n行
n-: 光标上移n行
n$: 光标移至第n行尾
H: 光标移至屏幕顶行
M: 光标移至屏幕中间行
L: 光标移至屏幕最后行
0: 光标移至当前行首
$: 光标移至当前行尾
屏幕翻滚类命令
Ctrl+u: 向文件首翻半屏
Ctrl+d: 向文件尾翻半屏
Ctrl+f: 向文件尾翻一屏
Ctrl+b: 向文件首翻一屏
nz: 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
i: 在光标前
I: 在当前行首
a: 光标后
A: 在当前行尾
o: 在当前行之下新开一行
O: 在当前行之上新开一行
r: 替换当前字符
R: 替换当前字符及其后的字符,直至按ESC键
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符 S: 删除指定数目的行,并以所输入文本代替之
ncw或nCW: 修改指定数目的字
nCC: 修改指定数目的行
删除命令
ndw或ndW: 删除光标处开始及其后的n-1个字
do: 删至行首
d$: 删至行尾
ndd: 删除当前行及其后n-1行
x或X: 删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u: 删除输入方式下所输入的文本
搜索及替换命令
/pattern: 从光标开始处向文件尾搜索pattern
?pattern: 从光标开始处向文件首搜索pattern
n: 在同一方向重复上一次搜索命令
N: 在反方向上重复上一次搜索命令
:s/p1/p2/g: 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g: 将文件中所有p1均用p2替换
选项设置
all: 列出所有选项设置情况
term: 设置终端类型
ignorance: 在搜索中忽略大小写
list: 显示制表位(Ctrl+I)和行尾标志($)
number: 显示行号
report: 显示由面向行的命令修改过的数目
terse: 显示简短的警告信息
warn: 在转到别的文件时若没保存当前文件则显示NO write信息
nomagic: 允许在搜索模式中,使用前面不带―\‖的特殊字符
nowrapscan: 禁止vi在搜索到达文件两端时,又从另一端开始
mesg: 允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令
:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d: 将 n1行到n2行之间的内容删除
:w: 保存当前文件
:e filename: 打开文件filename进行编辑
:x: 保存当前文件并退出
:q: 退出vi
:q!: 不保存文件并退出vi
:!command: 执行shell命令command
:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之,
若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command: 将命令command的输出结果放到当前行
寄存器操作
―?nyy: 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
―?nyw: 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
―?nyl: 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
―?p: 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd: 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中