Linux学习[17]bash学习深入3---万用字符特殊符号---数据流重导向

news2024/11/17 21:54:30

文章目录

  • 前言
  • 1. 万用字符
  • 2. 特殊字符
  • 3. 数据流重导向
    • 3.1标准输出
    • 3.2 标准输入
  • 总结

前言

这篇博客是对之前在查找的时候涉及到的一些通配符(bash里面就是万用字符)的整理。这个为后面管线相关打一个基础。


1. 万用字符

这里整理了一个表格,后面配上相关实例。

符号含义
*代表“ 0 个到无穷多个”任意字符
代表“一定有一个”任意字符
[ ]同样代表“一定有一个在括号内”的字符(非任意字符)。例如 [abcd] 代表“一定有一个字符, 可能是 a, b, c, d 这四个任何一个”
[ - ]若有减号在中括号内时,代表“在编码顺序内的所有字符”。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!
[ ^ ]若中括号内的第一个字符为指数符号 (^) ,那表示“反向选择”,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

实例:
/etc目录下为例
在cd进/etc目录之后,通过ls可以看到非常多的文件,部分文件前缀重合,这样方便我们演示。
在这里插入图片描述
上图没有列全,下面还有好多文件。

例1:我们通过ls h*表示以h开头的文件,h后面接0/无穷个字符的文件都行。
这里我们可以看到列出的是h开头的一些文件以及以hp目录下hp开头的文件。它们都满足h开头的文件,只不过ubuntu把它们归了个类,说明了不同文件是当前目录的还是下面子目录的。
在这里插入图片描述

例2:现在要查找以host开头,并且一定是host后面还有一个字符的。
指令:ls host?

在这里插入图片描述

在这里插入图片描述
host开头的有很多,但host后面只有一个字符的只有hosts文件,所以通过ls host?查找的结果当然也就只有hosts文件。

例3:现在查找以h开头,并且一定是h后面有一个字符文件。
我们通过ls可以看到/etc目录下有一个hp子目录。
在这里插入图片描述
当我们用ls h?的时候,它并不会显示hp目录,而是直接把hp里面的文件显示出来。这个和例2少许不同,值得注意。
在这里插入图片描述

例4:列出/etc目录下包含[wzy]三个字符中的任意一个字符为首且后面的字符不限制的文件。
指令:ls [wzy]*
在这里插入图片描述
例5:列出/etc目录下包含x->z字符开头且后面字符不限的文件。
这里如果是目录,则会把对应目录的所有文件全列出来。
指令:ls [x-z]*
在这里插入图片描述
例6:和例5一样的效果,只不过采样反向选择方式。
指令:ls [^a-w]*
这里表示列出除了a->w开头的其他字母开头的文件,这里除了a->w,那就是xyz开头,所以实现的效果和上面例5是一样的。

在这里插入图片描述

2. 特殊字符

bash除了上面的万用字符,还有很多特殊字符。
下面列一个表格,方便查阅。

符号内容
#注解符号:这个最常被使用在 script 当中,视为说明!在后的数据均不执行
\跳脱符号:将“特殊字符或万用字符”还原成一般字符
|管线 (pipe):分隔两个管线命令的界定(后两节介绍);
;连续指令下达分隔符号:连续性命令的界定 (注意!与管线命令并不相同)
~使用者的主文件夹
$取用变量前置字符:亦即是变量之前需要加的变量取代值
&工作控制 (job control):将指令变成背景下工作
!逻辑运算意义上的“非” not 的意思!
/目录符号:路径分隔的符号
>, >>数据流重导向:输出导向,分别是“取代”与“累加”
<, <<数据流重导向:输入导向 (这两个留待下节介绍)
’ ’单引号,不具有变量置换的功能 ($ 变为纯文本)
" "具有变量置换的功能! ($ 可保留相关功能)
``两个 ` 中间为可以先执行的指令,亦可使用 $( )
( )在中间为子 shell 的起始与结束
{ }在中间为命令区块的组合!

3. 数据流重导向

3.1标准输出

这个词听起来挺高大上的,说简单点就是我输出的东西换个地方存。
比如我们之前用ls指令查看当前目录下的所有文件,那么控制台会直接输出到控制台界面。
我们如果想把这个输出的内容导入到我们创建第一个文件中,比如我在/home/edwinwzy/LearnOfLinux目录下创建一个空文件datatre,
我想将/etc目录下用ls指令输出的内容存放到datatre中,我可以这样做:ls >/home/edwinwzy/LearnOfLinux/datatre

这里datatre文件可以不用创建,因为我们使用指令的时候,如果没有这个文件,系统会自动创建并且保存数据到该文件。
下图左边是指令,右边是文件内的数据。

在这里插入图片描述

上面是数据流重导向的常规运用,下面结合书上的内容对数据流重导向进行详细介绍。

我们执行一个指令的时候,这个指令可能会由文件读入数据,经过处理之后,再将数据输出到屏幕上。 通常数据信息包括标准的输出和错误输出,standard output 与 standard error output 分别代表“标准输出 (STDOUT)”与“标准错误输出 (STDERR)”, 这两个东西默认都是输出到屏幕上面来的。标准输出指的是“指令执行所回传的正确的讯息”,而标准错误输出可理解为“ 指令执行失败后,所回传的错误讯息”。

比如我们用ls查看habcd开头的文件,但其实我们/etc目录下没有,这时会就会提示没有这个文件,那么这就是标准错误输出。反之,如果有符号我们指令条件的文件,那就会显示该文件,这个文件的显示就是标准输出。

标准输入  (stdin) :代码为 0 ,使用 < 或 << ;
标准输出  (stdout):代码为 1 ,使用 > 或 >> ;
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

这个小节一开始以及演示过用法,但是>与>>有什么不同,怎么用,下面给出解释。
>默认标准输出,而非标准错误输出。

1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上;
1>>:以累加的方法将“正确的数据”输出到指定的文件或设备上;
2> :以覆盖的方法将“错误的数据”输出到指定的文件或设备上;
2>>:以累加的方法将“错误的数据”输出到指定的文件或设备上;

如果我们想多个指令的输出放到同一个文件上,就会涉及到累加和覆盖情况,上面则列出了用法,用法比较简单,这里不演示了。

下面还有几个用法:

如果我知道错误讯息会发生,所以要将错误讯息忽略掉而不显示或储存呢? 这个时候黑洞设备 /dev/null 就很重要了!这个 /dev/null 可以吃掉任何导向这个设备的信息。

1.将错误的数据丢弃,屏幕上显示正确的数据

find /home -name .bashrc 2> /dev/null

2.无论正确是还是错误的数据统一都保存到一个文件中

find /home -name .bashrc > list 2> list -------错误写法

find /home -name .bashrc > list 2>&1 -----正确写法

错误写法为什么错?虽然它确实可以把正确和错误的数据统一的保存,但由于两股数据同时写入一个文件,又没有使用特殊的语法, 此时两股数据可能会交叉写入该文件内,造成次序的错乱。所以虽然最终 list 文件还是会产生,但是里面的数据排列就会怪怪的,而不是原本屏幕上的输出排序。

3.2 标准输入

上面写的都是通过指令输出数据,再把数据存放到一个文件中去。
那标准输入就是相反的过程,即本来由控制台输入的数据变成了从文件中读取数据。

举个例子应该就很好懂了。
我在当前目录下使用cat >data,如果没有data文件则会自动创建,接着输入123456,按ctrl+c。
此时一个含有123456文本名为data的文件创建了。
在这里插入图片描述

现在我要创建一个DATA文件,里面的数据内容是data的数据。
在这里插入图片描述
在这里插入图片描述

上面这个例子只是一个演示,实际运用还需要后面实践。


总结

这篇博客整理了万用字符和特殊符号,并对前者的用法进行了举例,同时详细阐述了数据流重导向,为后面的管线等学习打了个基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676267.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

定制化你的应用外观:gradio的自定义主题功能

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Axure教程——多项选择器

本文介绍利用Axure里的中继器和动态面板制作一个多选下拉列表 一、效果 预览地址:https://frh0rc.axshare.com 二、功能 1、点击下拉框可以弹出选项&#xff0c;点击选项可以选中选项2、用户可以取消选中 三、制作 1、制作下拉框 拖入一个矩形组件&#xff0c;命名为“下拉框…

C++——指针空值

在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下方式对其进行初始化&#xff1a; void TestPtr() {int*…

python---案例分析(2)

例5: 使用python生成一个二维码 结果就会显示一个二维码!拿出手机扫描二维码就可以看到make中填写的内容! 例6: 操作excel 使用python计算平均分的情况 首先在自己的pycharm上安装xlrd 必须是上述版本的 安装成功版本后,import一下即可使用 以下是计算100班的平均分 例6: …

后端开发通用

1、前后端开发 项目基于前后端分离的架构进行开发&#xff0c;前后端分离架构总体上包括前端和服务端&#xff0c;通常是多人协作开发 对于后端java工程师 把精力放在设计模式&#xff0c;springspringmvc&#xff0c;linux&#xff0c;mysql事务隔离与锁机制&#xff0c;mongo…

typescript找不到模块‘vue‘ ‘vue-router‘

import { createRouter, createWebHashHistory, createWebHistory } from vue-router 提示&#xff1a;找不到模块“vue-router”。你的意思是要将 "moduleResolution" 选项设置为 "node"&#xff0c;还是要将别名添加到 "paths" 选项中?ts(27…

Python基础篇(五):函数的定义和调用

Python基础篇(四)&#xff1a;基本数据类型的学习和示例 函数的定义和调用 前言1. Python 函数示例2. 自定义函数2.1 函数语法2.2 函数示例2.3 函数调用 3.内置函数3.1 数学函数3.2 类型转换函数3.3 序列操作函数3.4 输入输出函数3.5 文件操作函数3.6 迭代函数3.7 集合操作函数…

C#期末考试总结:

考点1&#xff1a;内插字符串$(使用方法&#xff1a;$"........{变量名}....."&#xff0c;作用&#xff1a;可读性增强&#xff0c;本身个也是一个字符串&#xff0c;可以作为一个变量赋值&#xff0c;有利于字符串的生成 考点2&#xff1a;强类型语言 考点3&…

【Unity之IMGUI】—自定义常用控件的封装(即拿即用)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

为什么有了HTTP,还需要WebSocket协议?

目录 WebSocket是什么&#xff1f; WebSocket怎样建立连接&#xff1f; WebSocket的实际用途 WebSocket 与 HTTP 的选择 HTTP是基于TCP协议的&#xff0c;同一时间里&#xff0c;客户端和服务器只能有一方主动发数据&#xff0c;是半双工通信。 通常&#xff0c;打开某个网…

基于Java海鲜自助餐厅系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

【Syncfusion系列】开篇简介

背景 准备开个新坑&#xff0c;分享下Syncfusion&#xff08;UI框架&#xff09;的使用&#xff0c;之前用的handycontry&#xff0c;目前是两者结合起来用。Syncfusion真的是非常的强大&#xff0c;我必须记录一下。 Syncfusion 简介 Syncfusion 是一家软件公司&#xff0c;专…

华为手机内存不足?别焦虑,这里有迁移数据的超实用技巧!

1、usb线缆连接电脑和手机。 2、使用C:\Program Files (x86)\HiSuite\HiSuite.exe工具导出照片和视频。 步骤1&#xff1a;下载和安装HiSuite.exe工具 前往华为官网下载并安装HiSuite.exe工具。安装完成后&#xff0c;通过USB线将你的华为手机连接到电脑上。 步骤2&#xff…

centos 安装elasticsearch8.7.0, 并设置密码访问

访问下载网站 Elasticsearch 8.7.0 | Elastic 进入centos , 创建目录es mkdir /opt/es cd /opt/es wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.7.0-linux-x86_64.tar.gz 3、解压目录 es870 tar -zxvf elasticsearch-8.7.0-linux-x86_64.tar…

NFC CE运行模式

NFC CE运行模式使得携带NFC芯片的设备能充当智能卡&#xff08;例如信用卡&#xff09;使用。该运行模式所支持的应用场景极具吸引力&#xff0c;例如用支持该功能的Android智能手机来完成购票、支付&#xff0c;甚至充当门禁卡&#xff0c;汽车钥匙、公交卡等。 图8-19为CE运…

如何使用SQL语句创建触发器

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…

MySQL的版本从5.7跳到了8.0有哪些原因?

MySQL的版本从5.7跳到了8.0的原因&#xff1f; 一、引言1.1、MySQL是什么&#xff1f;1.2、MySQL 5.7和8.0的历史背景 二、MySQL 8.0的新功能2.1、更好的安全性2.2、更高的性能2.3、更好的可扩展性2.4、JSON支持 三、MySQL 8.0的重要改进3.1、更严格的数据类型检查3.2、其他重要…

第三章 处理机调度

目录 一、调度的概念、层次 2.1 调度的基本概念 2.2 调度的三个层次 2.2.1 高级调度 2.2.2 低级调度 2.2.3 中级调度 2.2.3.1 进程的挂起态 2.2.4 三层调度的联系、对比 二、进程调度的时机、切换与过程、方式 2.1 进程调度的时机 2.2 进程调度的方式 2.2.1 非抢占…

MFC的main函数

-- 我们走得太远&#xff0c;忘掉了来时路。 MFC程序的main在哪里&#xff1f; MFC的main是_tWinMain&#xff08;&#xff09;&#xff0c;有的版本是WinMain&#xff08;&#xff09;&#xff0c;AfxWinMain&#xff08;&#xff09;&#xff0c;总之会有Main字样。 作为C/C…

【Spring】Spring有什么用?Spring核心与设计思想之IOC与DI

文章目录 1 何为 Spring&#xff1f;2 什么是容器&#xff1f;3 理解Spring的 IOC3.1 传统开发的缺陷3.2 基于 IOC 思想的开发3.3 再谈Spring中的 IOC 4 理解Spring中的 DI写在最后 1 何为 Spring&#xff1f; Spring是一个开源的、轻量级的、面向企业级的Java应用框架。它提供…