文本编辑与打印命令(五)

打印命令:echo,printf,read,tee

文本编辑器:vim,nano,gedit

重命名:rename,dirname,basename,alias

历史命令:history

5.1.echo

功能:打印一行

语法:

echo [SHORT-OPTION]... [STRING]...

echo LONG-OPTION

常用选项:

-n:不输出换行符

-e:解释转义字符

-E:不解释

示例:

[[email protected] ~]# echo -e ‘1\n2\n3‘  #加了-e,就把\n定义为换行字符,这样才会换行打印
1
2
3
[[email protected] ~]# echo ‘1\n2\n3‘ #不加就只是作为字符输出了
1\n2\n3
[[email protected] ~]# echo -e ‘1\t2\t3‘ #解释制表符
1	2	3
[[email protected] ~]# echo ‘1\t2\t3‘
1\t2\t3
[[email protected] ~]# echo hello,world > 1 #echo的重定向功能
[[email protected] ~]# cat 1
hello,world
[[email protected] ~]# echo welcome to linux world >> 1 #echo的追加功能
[[email protected] ~]# cat 1
hello,world
welcome to linux world

5.2.printf

功能:格式化打印数据,默认打印字符串不换行

语法:printf FORMAT [ARGUMENT]...

printf OPTION

常用选项:

format:

%.ns    输出字符串,n是输出几个字符

%ni      输出整数,n是输出几个数字

%m.nf  输出浮点数,m是输出的整数位数,n是输出的小数位数

%x       不带正负号的十六进制值,使用a至f表示10至15

%X      不带正负号的十六进制,使用A至F表示10至15

%%      输出单个%

%d       有符号32位整数

%lld     有符号64位整数

%llx      有符号64位16进制整数

%u        无符号32位整数

常用空白符:

\n:换行

\r:回车

\t:水平制表符

对齐方式:

%-5s   对参数每个字段左对齐,宽度为5

%-4.2f  左对齐,宽度为4,保留两位小数

不加横线"-"表示右对齐。

示例:

#打印一个字符:
[[email protected] test]# printf "%.1s" 123
#打印三个字符:
1[[email protected] test]# printf "%.3s" 123
#不保留小数,前面什么都不加
123[[email protected] test]# printf "%.f" 1.314529
#保留两位
1[[email protected] test]# printf "%.2f" 1.314529
#换行打印,看到前面的为啥没有结果,因为都跑到第二行开头来了
1.31[[email protected] test]# printf "%.2f\n" 1.314529
1.31
#格式化打印:
[[email protected] test]# printf "user: %s\tpassword: %d\n" root 123
user: rootpassword: 123
#左对齐宽度5
[[email protected] test]# printf "%-5s  %-5s %-5s\n" 1 2 3
1      2     3    
#右对齐宽度5
[[email protected] test]# printf "%5s  %5s %5s\n" 1 2 3
    1      2     3
#每行右对齐
[[email protected] test]# printf "%5s\n" 1 2 3
    1
    2
    3
#每行左对齐
[[email protected] test]# printf "%-5s\n" 1 2 3
1    
2    
3

5.3.read

功能:接收标准输入,或其他文件描述符的输入

常用选项:

-d:输入结束符,默认结束符是换行

-p:提示语句

-n:字符个数

-t:等待时间

-s:不回显

-a:数组名

示例:

[[email protected] scripts]# cat read01.sh 
#!/bin/bash
echo -n "enter your name:" #参数-n不换行,默认是换行的
read name   read  #读入变量,后边的echo才能引用变量
echo "hello $name" 
执行结果:
[[email protected] scripts]# sh read01.sh 
enter your name:yyl
hello yyl
[[email protected] scripts]# sh read01.sh #没有read的读入,变量name不起作用,结果就是底下这样
enter your name:hello 
[[email protected] scripts]# cat read01.sh 
#!/bin/bash
echo -n "enter your name:"
echo "hello $name"
-p参数使用
[[email protected] scripts]# sh read01.sh 
enter your name:yyl
hello yyl
[[email protected] scripts]# cat read01.sh 
#!/bin/bash
read -p "enter your name:" name
echo "hello $name"
是不是比echo的效果好很多
-t参数使用
[[email protected] scripts]# sh read02.sh 
enter your name:yyl
hello yyl
[[email protected] scripts]# sh read02.sh  计时到时,会自动退出脚本
enter your name:sorry,timeout
[[email protected] scripts]# cat read02.sh 
#!/bin/bash
if read -t 10 -p "enter your name:" name;then
   echo "hello $name"
else
   echo "sorry,timeout"
fi
-n参数使用
[[email protected] scripts]# sh read03.sh 
enter your name:yyl
hello yyl
[[email protected] scripts]# sh read03.sh 
enter your name:dfd
Usage:YYL|yyl PXT|pxt
[[email protected] scripts]# sh read03.sh 
enter your name:pxt
fine,pxt
[[email protected] scripts]# cat read03.sh 
#!/bin/bash
read -n3 -p "enter your name:" name
case $name in
YYL|yyl)
   echo -e "\nhello $name"
;;
PXT|pxt)
   echo -e "\nfine,$name"
;;
*)
   echo -e "\nUsage:YYL|yyl PXT|pxt"
;;
esac
说明:使用-n后,后接3,表示read接到3个字符就对出,只要有字符输入,read就会接受输入传给变量,无需按回车
-s选项使用
[[email protected] scripts]# sh read01.sh 
enter your name:hello yyl
[[email protected] scripts]# cat read01.sh 
#!/bin/bash
read -s -p "enter your name:" name
echo "hello $name"
说明:-s会隐藏你输入的信息,起到一个安全保护的作用
运用read读取文件
[[email protected] scripts]# sh read04.sh 
LINE 1:root:x:0:0:root:/root:/bin/bash
................................
LINE 22:yyl:x:500:500::/home/yyl:/bin/bash
print ok
[[email protected] scripts]# sh read05.sh
LINE :root:x:0:0:root:/root:/bin/bash
................................
LINE :yyl:x:500:500::/home/yyl:/bin/bash
print ok
[[email protected] scripts]# cat read04.sh  read05.sh 
#!/bin/bash
count=1 #加入count是为了加入行号
cat /etc/passwd |while read line;do #把cat查看的文件作为read的读入,一行行读取
   echo "LINE $count:$line"
   count=$[ $count + 1 ]    #每循环count加1
 done
echo "print ok"
#!/bin/bash   #这个脚本没有加入count,它也会一行行去读取,只是少了行号
cat /etc/passwd |while read line;do
   echo "LINE $count:$line"
done
echo "print ok"

5.4.tee

功能:从标准输入读取,写到标准输出和文件

语法:tee [OPTION]... [FILE]...

常用选项:

-a 追加到文件

示例:

[[email protected] ~]# echo 123 |tee -a 123
123
[[email protected] ~]# cat 123
123
说明:不过这样不觉得这个命令增加工作量,输入追加echo命令就可以做到

5.5.history

功能:打印或操作历史命令列表

常用选项:

-c:清空命令历史

-d n:删除指定历史命令,n表示命令行号

#:显示最近的#条历史命令

-a:追加本次会话新执行的历史命令列表到历史文件中

-n:读取历史命令文件中未读过的行到历史列表,这里的历史命令文件指的是存储历史命令的文件,历史列表是执行history的列表

-r:读取历史文件中的命令到当前历史列表,也就是history

-w:保存历史列表到历史命令文件中

history相关的环境变量:

HISTFILE          指定存放历史文件位置,默认位置在~/.bash_profile,/etc/profile(针对全局 )
HISTFILESIZE      命令历史文件记录历史的条数 
HISTSIZE          命令历史记录的条数,默认为1000 
HISTTIMEFORMAT="%F %T"  显示命令发生的时间 
HISTIGNORE="str1:str2:..." 忽略string1,string2历史 
HISTCONTROL      包含一下4项,让哪一项生效只需要让其=下面一项即可 
ignoredups:  忽略重复的命令;连续且相同方为“重复” 
ignorespace:  忽略所有以空白开头的命令 
ignoreboth:ignoredups,ignorespace 
erasedups:    删除重复命令

history常用的快捷键
 重新调用前一个命令中最后一个参数:
  !$ 
  Esc, .(点击Esc键后松开,然后点击. 键)
!!:调用上一条命令

示例:

[[email protected] ~]# history |wc -l
1000
[[email protected] ~]# history -c   #-c是清空历史列表而非历史文件中的命令
[[email protected] ~]# history |wc -l
1
[[email protected] ~]# history -r  #-r加了历史文件中的命令,又有1000条命令
[[email protected] ~]# history |wc -l
1000
[[email protected] ~]# history
.......................
 2136  mv /home/yyl01/file{1..5} /home/yyl01/redhat/test/
 2137  cd /home/yyl01/redhat/test/
 2138  ls
 2139  mv file{1..5} test1 test2 test3 test4 test5
 2140  ls 
 2141  ls *|sed -i ‘s/file/test/g‘
 2142  ls *
 2143  echo *
 2144  echo * |sed -i ‘s/file/test/g‘
 2145  history |wc-l
 2146  history |wc -l
 2147  history
[[email protected] ~]# history -d 2139 
[[email protected] ~]# history
.........
 2137  cd /home/yyl01/redhat/test/
 2138  ls
 2139  ls 
 2140  ls *|sed -i ‘s/file/test/g‘
 2141  ls *
 2142  echo *
 2143  echo * |sed -i ‘s/file/test/g‘
 2144  history |wc-l
 2145  history |wc -l
 2146  history
 2147  history -d 2139
 2148  history
[[email protected] ~]# history -n  跟-r命令效果差不多,只是以未读到历史列表中的会读到,而不是像-r所有
[[email protected] ~]# cat .bash_history |wc -l  #说明只能存1000个命令
1000
[[email protected] ~]# history -w #-w存入也是覆盖掉以前的,继续是1000个命令

5.6.alias

功能:定义别名

常用选项:

-p:打印现有的所有别名(唯一参数)

示例:

#alias kk=ls  只在当前终端生效
#unalias kk  取消别名
#vim /root/.bashrc    
永久定义别名,局部配置文件(针对root)
#alias kk=‘ls -l‘
#source ~/.bashrc  或者. ~/.bashrc  
立刻马上生效
#vim /etc/bashrc   
让所有的用户都生效(全局)

5.7.rename

功能:重命名文件,支持通配符

语法:rename from to file...

rename -V

常用选项:

-V:打印版本(唯一参数)

示例:

[[email protected] scripts]# rename -V
rename (util-linux-ng 2.17.2)
批量命名文件
将file1-file5重名为test1-test5
[[email protected] ~]# ls file*
file1  file2  file3  file4  file5
[[email protected] ~]# rename "file" "test" *
[[email protected] ~]# ls test*
test1  test2  test3  test4  test5
创建文件后缀为.jpg的,然后把后缀改名为.html
[[email protected] test]# for file in `seq -w 10`;do touch stu_$file.jpg;done
[[email protected] test]# ls
stu_01.jpg  stu_03.jpg  stu_05.jpg  stu_07.jpg  stu_09.jpg
stu_02.jpg  stu_04.jpg  stu_06.jpg  stu_08.jpg  stu_10.jpg
[[email protected] test]# rename ".jpg" ".html" ./*
[[email protected] test]# ls
stu_01.html  stu_03.html  stu_05.html  stu_07.html  stu_09.html
stu_02.html  stu_04.html  stu_06.html  stu_08.html  stu_10.html

5.8.dirname

功能:去除路径的最后一个后缀

语法:dirname NAME

dirname OPTION

man手册的示例:

dirname /usr/bin/sort

Output "/usr/bin"

dirname stdio.h

Output "."

验证下:

[[email protected] test]# dirname /usr/local/bin/
/usr/local
[[email protected] scripts]# ls read01.sh 
read01.sh
[[email protected] scripts]# dirname read01.sh 
.

5.9.basename

功能:打印路径的最后一个后缀

语法:basename NAME [SUFFIX]

basename OPTION

常用选项:

-V:查看版本

man手册示例:

basename /usr/bin/sort

Output "sort".

basename include/stdio.h .h

Output "stdio".

跟dirname刚好相反

验证下:

[[email protected] scripts]# basename /usr/local/bin
bin
[[email protected] scripts]# ls read01.sh
read01.sh
[[email protected] scripts]# basename read01.sh 
read01.sh

5.10.nano

功能:简单文件编辑器

下面介绍下用法,具体功能自己体会,我本人喜欢用vim

用法:

光标控制

移动光标:使用用方向键移动。

选择文字:按住鼠标左键拖到。

复制、剪贴和粘贴

复制一整行:Alt+6

剪贴一整行:Ctrl+K

粘贴:Ctrl+U

选定复制:先ctrl+6或alt+a标记开始,然后光标移至要复制或剪切的末尾,alt+6复制,ctrl+k剪贴,若要取消,再按一次ctrl+6

搜索:Ctrl+W

翻页:

Ctrl+Y到上一页

Ctrl+V到下一页

保存:

Ctrl+O

退出:

Ctrl+X

5.11.gedit

功能:文本编辑器

了解即可,文本编辑还是vim强大

快捷键:

  CTRL-Z:撤销

  CTRL-C:复制

  CTRL-V:粘贴

  CTRL-T:缩进

  CTRL-Q:退出

  CTRL-S:保存

  CTRL—R:替换

  CTRL+Tab 切换

  CTRL+W 关闭选项卡

5.12.vim

vi和vim:文本编辑器(增强版vi,现在基本各种linux版本都带有vim)
1、vi编辑器是所有类unix下的标准编辑器。
2、vim是vi的升级版本,大部分类unix系统都默认安装了vim编辑器
3、vim具有程序编辑能力,可以通过颜色来辨别语法的正确性,方便程序设计

vim工具三种模式:
1,一般普通模式:底行模式(末行模式)
2,编辑模式(插入模式):i I o O a A r R
3,命令行模式:   : /  ?

移动相关:
--ctrl+b   向上翻页   =  page up
--ctrl+f    向下翻页=  page down
--ctrl+d   向下移动半页
--ctrl+u   向上移动半页
--G          移动到页末 =shift +g
--gg        移动到页头
--0          移动到行头 = home
--$          移动到行末 = end
--n          (代表数字)+回车   向下移动N行   
--h          向左移动
--l           向右移动
--k          向上移动
--j           向下移动

删除,复制,粘贴
--x           向后删除一个字符 = delete
--X          往前删除一个字符 = backspace
--dd        直接删除光标所在行ndd  (n代表数字,删除n行)
--yy        复制光标所在行nyy(n代表数字,复制n行)
--p         粘贴
--u         回退上一次操作     按一次u只能回退一次,一直按u,撤销到文件最后一次保存的状态 |ctrl+r 撤销撤销
--ctrl+r  重做上一次操作

进入编辑模式:
i       当前insert
I       行头insert
a      向后一个字符insert
A     行末insert
o     下一行insert
O    上一行insert
r      替换光标所在的字符
R     从光标处向后一直替换
ESC 从编辑模式回退到一般模式

查找与替换:
-- /word                          查找单词      n  向下查找   N 向上查找
-- :1,$s/old/new/g       从第一行到最后一行都用new替换old
--:%s/root/hello             替换每一行第一次出现的关键字
--:%s/root/uplook/g      全文搜索替换
--:%s/root/uplook/gc    交互式搜索替换
--:11s/nologin/haha/g   在指定行搜索替换
-- :%s/old/new/g           从第一行到最后一行都用new替换old
-- :n1,n2s/old/new/g     从n1行到n2行用new替换old
-- :1,$s/old/new/gc从 第一行到最后一行都用new替换old,多加了一个c就可以要求用户确认哪些换哪些不换
--/关键字                       n向下匹配|N向上匹配
--?关键字                     n向上匹配|N向下匹配

如果搜索的关键字里有特殊字符:
自定义分割符:
--:%s#/sbin/nologin#hello#g
反斜杠进行转义:
--:%s/\/bin\/bash/\/sbin\/nologin/g
--:w /tmp/aaa.txt       文件另存为
--:1,5w 888.txt           保存文件的前5行
--:r filename              读取另一个文件的内容到当前文件(默认光标所在行的下面)
--:set nu                    显示行号(临时)
--:n(代表数字)+回车直接把光标定位到n行
--:w保存 (write)
--:q退出(quit)
--:wq保存并退出    =shift+zz   
--+!表示强制保存或者退出

如果你希望vim打开时默认就有行号,可以这样做
# vim /etc/vimrc 
--set number --在这个配置文件空的地方加上这一句就可以了
--:set number    或者 : set nu   把每一行都加上行号
--:set nonumber  或者 : set nonu去掉每一行前的行号

总结:
vim file——>命令行模式(yy/p/P/u/dd/G/gg..)——>编辑模式(i/I/a/A/o/O/r/R)——>底行模式(按“Esc”——>退出到命令行模式——>再按冒号“:”|搜索替换等)

5.13.练习
5.13.1 将/etc/passwd文件拷贝到/tmp目录下面。在/tmp/passwd文件的第15行下添加“hello yyl”,并复制其下5行,粘贴在文件的最下面,保存。然后全文搜索将“/bin/bash”替换成yyl,并保存后面20行到 /tmp/passwd.bak文件中,退出编辑。

解答:

cp /etc/passwd /tmp
:15 按o到下行添加“hello yyl”
按esc光标移动下行
5yy shift+g end  p
:%s/\/bin\/bash/yyl/g
:set nu
:11,30w /tpm/passwd.bak

5.13.2.找出/etc/下面的所有目录并将其重定向到/tmp/etcdir文件里

解答:

方法一:
[[email protected] tmp]# ll /etc/ >> /tmp/123
[[email protected] tmp]# cat /tmp/123 |grep ^d >> /tmp/etcdir
方法二:
[email protected] tmp]# ll /etc/ |grep ^d >> /tmp/etcdir
方法三:ls
#!/bin/bash
ls -l /etc/* | grep "^d" >> /tmp/ccc.txt
if [ $? -eq 0 ];then
      echo "file is create successed"
else
      echo "file is create failed"
fi
方法四:(用while+read循环)
[[email protected] scripts]# cat Dir.sh 
#!/bin/bash
ls -l /etc/|grep ^d |while read line;do
    echo $line >>/tmp/etcdir
done
cat /tmp/etcdir |wc -l

5.13.3.在/tmp/etcdir文件中追加“好好学习,天天向上”,然后把/etc/passwd文件的内容添加到/tmp/etcdir文件里,并重命名为newetcdir

[[email protected] scripts]# echo "好好学习,天天向上" >> /tmp/etcdir
[[email protected] scripts]# cat /etc/passwd >> /tmp/etcdir 
[[email protected] scripts]#mv /tmp/etcdir /tmp/newetcdir
另外一种方法:
[[email protected] scripts]# rename "etcdir" "newetcdir" /tmp/etcdir

5.13.4.小实验
一个终端 tail -f /var/log/messages
另一个终端logger -t "任何信息" " 任何信息"  (logger命令后边说)
再观察第一个终端的变化

[[email protected] ~]# tail -f /var/log/messages
May 26 11:11:24 localhost 任何信息:  任何信息
May 26 11:11:35 localhost 任何信息:  任何信息
[[email protected] ~]# logger -t "任何信息" " 任何信息"
时间: 2024-11-25 12:55:01

文本编辑与打印命令(五)的相关文章

《sed的流艺术之二》-linux命令五分钟系列之二十二

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之一>-linux命令五分钟系列之二十一 5 sed中有选项么?有没有什么比较常用的? sed最主要的就是command部分,把这部分玩转了,你就已经很厉害了,而玩转这部分的前提是玩转正则表达式.尽管如此,sed的选项部分的-n选项仍然是非常重要,理解

Linux常用命令(五)

Linux常用命令(五) 今天,我们继续总结linux的find命令,find命令经常与另外两个命令exec和xargs一起使用,那么今天我们就看看他们到底是怎么使用的吧. 1 exec 命令 -exec参数后面跟的是command命令,以';'为结束标志,并且要在':'之前增加'\',考虑到各个系统中分号会有不同的意义,所以前面加反斜杠. 1.1 语法 find[文件目录]... -exec [commond] {} \; 1.2 命令参数 1.3 命令实例 用-exec选项执行ls命令 [[

《paste命令》-linux命令五分钟系列之二十

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 在本系列上一篇文章中涉及到了cut命令(<cut命令>-linux命令五分钟系列之十九),本文章介绍的这个paste命令,是一个专门和cut对着干的命令,作用是将几个文件拼凑在一起. 1 paste的拼凑原理是什么? 这个很简单,和cut的原理几乎一样,就是将几个文件的相应行

《sed的流艺术之三》-linux命令五分钟系列之二十三

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之二>-linux命令五分钟系列之二十二 例五 给某些字符串后面插入些内容 [[email protected] programming]$ cat mysed.txt Beijing London[[email protected] programm

《sed的流艺术之一》-linux命令五分钟系列之二十一

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 1 你想过sed为什么叫sed么? sed是stream editor的缩写,sed就是一个流编辑器,说白了,就是我们往sed里输入一串信息,它给我们处理,然后输出来.就这么简单. sed和cut类似,是一个面向行处理的工具,它以“行”为处理单位,处理后的结果会输出到标准输出.所以说其实

C#直接发送打印机命令到打印机及ZPL常用打印命令 - 条码打印机

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace BarCodeLibrary { public class ZebraGesigner { [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int Inter

《vi中的替换艺术》-linux命令五分钟系列之十一

vi方面的内容不知道分类到哪里好,就放到<Linux命令五分钟系列>里吧! 今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号). 其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅. 1 所有替换方案都要在冒号“:”状态下书写. 2 如果想将abc替换为xyz,那么就这样 :s/abc/xyz/ 不过要特别注意,这个替换只局限于光标所在当前行,而且更糟糕的是它只替换当前行的第一个匹配项. 即,如果此行内容为I write abc, I

《tr命令》-linux命令五分钟系列之六

本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == tr指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备. cat filename |tr u n :用于在屏幕上将filename文件中的u替换为n,而实际文件中未作替换 cat filename | tr -d abc 在屏幕上将filename内容中的所有出现的a或b或c字符删去,并显示

基础命令五

wc Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数.字数.行数,并将统计结果显示输出.该命令统计指定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所指定文件的总统计数. 3.命令参数: -c 统计字节数. -l 统计行数. -m 统计字符数.这个标志不能与 -c 标志一起使用. -w 统计字数.一个字被定义为由