4889软件园:电脑手机软件下载大全,热门手机游戏免费下载

4889软件园 > 资讯文章 > 怎么打出特殊符号(如何在KingDraw中输入特殊符号?)

怎么打出特殊符号(如何在KingDraw中输入特殊符号?)

作者:佚名 来源:4889软件园 时间:2023-01-15 18:02:28

怎么打出特殊符号(如何在KingDraw中输入特殊符号?)

怎么打出特殊符号文章列表:

怎么打出特殊符号(如何在KingDraw中输入特殊符号?)

如何在KingDraw中输入特殊符号?

我们在绘制反应流程的过程,经常会需要输入一些特殊符号,如何在KingDraw中输入特殊符号,也是很多用户经常会咨询的问题。

其实,在KingDraw中输入特殊符号的操作非常简单——我们可以通过“文本工具”输入;也可以在其他文件和网页中复制,直接粘贴到画板上。

通过文本工具输入

输入“加号”

如何输入“ ”,也是用户常会提到的问题。我们只要点击“文本工具”,在输入框中输入“ ”就可以。

KingDraw PC端

KingDraw手机端“文本工具”位置

输入反应常用特殊符号

为了方便大家绘制反应机理,文本工具中添加了反应常用的特殊符号,在文本工具窗体中点击即添加,目前支持“↑”、“↓”、“△”、“℃”四种符号的快捷输入。

KingDraw PC端

KingDraw手机端

输入希腊字母

KingDraw文本工具中的“symbol”字体,可以帮助我们输入希腊字母。在文本工具窗体中选择“symbol”字体后,输入的英文字母会显示为相对应的希腊字母。

KingDraw PC端

KingDraw手机端

symbol字体键盘输入对照表(点击查看大图)

复制粘贴到画板

在KingDraw中,我们支持将文档、网页中的文本内容直接复制到画板上,各种特殊符号可以通过这种方式快速输入。

我们以长度单位“?”为例:

第一步:在网页中复制(快捷键:Ctrl C)

第二步:在画板上粘贴(快捷键:Ctrl V)

KingDraw PC端

在KingDraw手机端中,需要在文本输入框中进行粘贴,是不是超级简单呢!

KingDraw手机端

学会用这个键,Word做得比领导还整齐, 早早下班不是梦

大家比较常用到哪些快捷键呢?快捷键用得熟练,工作效率可是会大大提高的。

下面介绍4类常用的Word快捷键,希望能够帮到你,大家一起提高效率,早早下班!

一、字体样式:

平常更改字体样式,总是需要选中文字,然后到上方工具栏点击对应的工具才能更改,操作虽然不难,但是次数多了花费的时间也相应地增加,使用快捷键能更快速地完成操作,何乐不为呢?

【Ctrl B】:将选中的字体加粗,如果是已加粗的字体,这一步会取消加粗哦。

【Ctrl I】:将选中的字体设置为斜体

【Ctrl U】:对选中的字体添加下划线

【Ctrl Shift <】:缩小字体字号

【Ctrl Shift >】:增大字体字号

【Ctrl D】:打开设置字体样式的对话框

二、文本对齐:

如果全文文本格式一致,那么可以全选设置,但是文本格式不一致的话,快捷键会更方便一些。

【Ctrl L】:段落位置设置为左对齐

【Ctrl E】:段落位置设置为居中

【Ctrl R】:段落位置设置为右对齐

【Ctrl J】:段落位置设置为两端对齐

【Ctrl Shift J】:段落位置设置为分散对齐

三、特殊字符插入:

输入一些字符加上快捷键,可以直接插入特殊字符或者线条。

【输入三个连续字符 Enter】:插入分割线

【Ctrl Enter】:在选中位置插入分页符

四、操作设置:

误删了一些内容或者添加了错误的内容,可以通过快捷键来撤销或恢复哦。

【Ctrl Z】:撤销上一步操作

【Ctrl Y】:恢复上一步操作

怕记不住的话,教大家一个小技巧,打印成纸质版,或者写在便利贴上,贴在电脑边缘,在制作Word的时候就可以参考啦,用熟了自然就记住啦。

以上就是今天和大家分享的4种Word快捷键啦,觉得有用的话可以收藏保存下来哦。

轻松构建表情符号制作应用程序

构建自定义表情符号制作应用程序,捕捉用户的面部表情并使对话更有趣。

表情符号是当今在线交流中必不可少的工具,因为它们有助于为基于文本的聊天增添色彩,并允许用户更好地表达文字背后的情感。由于预设表情符号的数量总是有限的,许多应用程序现在允许用户创建自己的自定义表情符号,以保持新鲜和令人兴奋。


例如,在社交媒体应用中,不想在视频通话时露脸的用户可以使用动画角色来保护自己的隐私,并将面部表情应用于角色;在直播或电子商务应用程序中,具有逼真面部表情的虚拟主播更有可能吸引观众;在视频或照片拍摄应用程序中,用户可以在自拍时控制动画角色的面部表情,然后通过社交媒体分享自拍;在儿童教育应用程序中,一个带有详细面部表情的可爱动画角色将使在线课程变得更加有趣和吸引学生。

我自己正在开发这样一个消息传递应用程序。当与朋友聊天并想以文字以外的方式表达自己时,我的应用程序的用户可以拍照以创建他们自己或他们选择的动画角色的表情符号。然后,该应用程序将识别用户的面部表情,并将他们的面部表情应用于表情符号。通过这种方式,用户可以创建无穷无尽的独特表情符号。在我的APP开发过程中,我利用HMS Core AR Engine提供的能力来跟踪用户的面部表情并将面部表情转换为参数,大大减少了开发工作量。现在我将向您展示我是如何做到这一点的。

执行
AR Engine 为应用程序提供了实时跟踪和识别面部表情的能力,然后可以将其转换为面部表情参数,用于精确控制虚拟角色的面部表情。

目前,该套件提供了 64 种面部表情,包括眼睑、眉毛、眼球、嘴巴和舌头的动作。支持眼球运动、开闭眼等21种眼部动作;28 种嘴部动作,包括张开嘴巴、皱起、拉动或舔嘴唇,以及移动舌头;以及五个眉毛动作,包括抬眉或下眉。

演示
基于面部表情的表情符号

开发流程
对开发环境的要求
JDK:1.8.211 或更高版本

Android Studio:3.0 或更高版本

minSdkVersion:26 或更高版本

targetSdkVersion:29(推荐)

compileSdkVersion:29(推荐)

Gradle 版本:6.1.1 或更高版本(推荐)

确保您已从 AppGallery 下载 AR Engine APK 并将其安装在设备上。

如果您需要使用多个 HMS Core 套件,请使用这些套件所需的最新版本。

准备工作
1. 开始之前,您需要注册成为华为开发者并完成身份验证。您可以点击这里了解详细的注册和身份验证程序。

2. 在开发之前,通过 Maven 仓库将 AR Engine SDK 集成到您的开发环境中。

3. 7.0之前的Gradle插件、7.0版本的Gradle插件、7.1及以上版本的Gradle插件,在Android Studio中配置Maven仓库地址的步骤各不相同。需要根据具体的 Gradle 插件版本进行配置。

4、以Gradle插件7.0为例:

在您的 Android Studio 项目中打开项目级build.gradle文件并配置 Maven 存储库地址。

转到buildscript > repositories并为 SDK 配置 Maven 存储库地址。

buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
打开项目级settings.gradle文件,配置HMS Core SDK的Maven仓库地址。

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
}
5. 在依赖项块中添加以下构建依赖项。

dependencies {
implementation 'com.huawei.hms:arenginesdk:{version}
}
应用程序开发
1. 检查当前设备是否安装了AR Engine。如果是,您的应用程序可以正常运行。如果没有,您需要提示用户安装它,例如,通过将用户重定向到 AppGallery。示例代码如下:

boolean isInstallArEngineApk =AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk) {
// ConnectAppMarketActivity.class is the activity for redirecting users to AppGallery.
startActivity(new Intent(this, com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));
isRemindInstall = true;
}
2. 创建一个 AR 场景。AR Engine支持五种场景,包括运动追踪(ARWorldTrackingConfig)、人脸追踪(ARFaceTrackingConfig)、手部识别(ARHandTrackingConfig)、人体追踪(ARBodyTrackingConfig)和图像识别(ARImageTrackingConfig)。

下面以调用ARFaceTrackingConfig创建人脸跟踪场景为例。

// Create an ARSession object.
mArSession = new ARSession(this);
// Select a specific Config to initialize the ARSession object based on the application scenario.
ARFaceTrackingConfig config = new ARFaceTrackingConfig(mArSession);
使用config.set XXX方法设置场景参数。

// Set the camera opening mode, which can be external or internal. The external mode can only be used in ARFace. Therefore, you are advised to use the internal mode.
mArConfig.setImageInputMode(ARConfigBase.ImageInputMode.EXTERNAL_INPUT_ALL);
3.设置人脸跟踪的AR场景参数,启动人脸跟踪。

mArSession.configure(mArConfig);
mArSession.resume();
4、初始化FaceGeometryDisplay类,获取人脸几何数据,并将数据渲染到屏幕上。

public class FaceGeometryDisplay {
// Initialize the OpenGL ES rendering related to face geometry, including creating the shader program.
void init(Context context) {...
}
}
5、初始化FaceGeometryDisplay类中的onDrawFrame方法,调用face.getFaceGeometry()获取人脸网格。

public void onDrawFrame(ARCamera camera, ARFace face) {
ARFaceGeometry faceGeometry = face.getFaceGeometry();
updateFaceGeometryData(faceGeometry);
updateModelViewProjectionData(camera, face);
drawFaceGeometry();
faceGeometry.release();
}
6.在FaceGeometryDisplay类中初始化updateFaceGeometryData() 。

传递面部网格数据以进行配置并使用 OpenGL ES 设置面部表情参数。

private void updateFaceGeometryData (ARFaceGeometry faceGeometry) {
FloatBuffer faceVertices = faceGeometry.getVertices();
FloatBuffer textureCoordinates =faceGeometry.getTextureCoordinates();
// Obtain an array consisting of face mesh texture coordinates, which is used together with the vertex data returned by getVertices() during rendering.
}
7. 初始化FaceRenderManager类来管理人脸数据渲染。

public class FaceRenderManager implements GLSurfaceView.Renderer {
public FaceRenderManager(Context context, Activity activity) {
mContext = context;
mActivity = activity;
}
// Set ARSession to obtain the latest data.
public void setArSession(ARSession arSession) {
if (arSession == null) {
LogUtil.error(TAG, "Set session error, arSession is null!");
return;
}
mArSession = arSession;
}
// Set ARConfigBase to obtain the configuration mode.
public void setArConfigBase(ARConfigBase arConfig) {
if (arConfig == null) {
LogUtil.error(TAG, "setArFaceTrackingConfig error, arConfig is null.");
return;
}
mArConfigBase = arConfig;
}
// Set the camera opening mode.
public void setOpenCameraOutsideFlag(boolean isOpenCameraOutsideFlag) {
isOpenCameraOutside = isOpenCameraOutsideFlag;
}
...
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mFaceGeometryDisplay.init(mContext);
}
}
8、在FaceActivity中调用FaceRenderManager的setArSession、setArConfigBase等方法实现人脸跟踪效果。

public class FaceActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
mFaceRenderManager = new FaceRenderManager(this, this);
mFaceRenderManager.setDisplayRotationManage(mDisplayRotationManager);
mFaceRenderManager.setTextView(mTextView);

glSurfaceView.setRenderer(mFaceRenderManager);
glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
}
}
结论
表情符号允许用户以文字无法表达的方式表达他们的情绪和兴奋。您现在可以通过允许用户自己创建表情符号来让您的应用程序变得更有趣,而不是为用户提供已使用一百万次的相同旧的无聊预设表情符号!用户只需面对镜头,选择他们喜欢的动画角色并微笑,就可以轻松创建带有自己微笑的表情符号。有了这种自定义表情符号的能力,用户将能够以更加个性化和有趣的方式表达自己的感受。

如果您有兴趣开发这样的应用程序,AR 引擎是一个潜在的选择。它能够实时识别用户的面部表情,将面部表情转换为参数,然后应用到虚拟角色中。集成该功能可以帮助您显着简化应用程序开发过程,让您有更多时间专注于如何为用户提供更有趣的功能并改善应用程序的用户体验。

微信输入安得双全法?

在整个公司的增长压力面前,微信输入法也得承担为腾讯其他业务输入流量的重担。

近日,不少用户发现,微信输入法(现名微信键盘)开始灰度测试。同时,腾讯申请注册多个“微信输入法”商标,目前状态均为“申请中”;去年3月申请的“微信键盘”商标已经注册成功。

图源:Tech星球

字母榜(ID: wujicaijing)发现,微信输入法的产品设计十分简洁,界面清爽、没有广告,与iPhone自带键盘十分相似,暂时不支持自定义键盘皮肤。

目前,微信输入法支持多种常见输入方式,包括全键盘、九宫格、手写输入、笔画键盘、五笔、双拼等,其中双拼支持搜狗、小鹤、微软、紫光等公司的方案;并自带语音转文字功能,目前支持普通话、粤语和英语,实测识别率较高。

微信输入法最引入注目的功能,当属“拼写Plus”。它可以在用户输入字符的同时,智能推荐腾讯生态内的相关内容。

例如,用户输入腾讯射击网游“穿越火线”,微信输入法就会以小卡片的方式,弹出与这款游戏相关的歌曲,点击即可发送至聊天窗口;输入公众号、视频号、电影、歌曲、书籍等名称,也会以类似方式进行推荐。

这或许意味着,微信正以自研输入法为切入点,在聊天场景内开辟新的流量分发出口,拉动集团内姊妹业务的增长。除了平台内的公众号和视频号,腾讯其他C端业务——QQ音乐、微信读书、腾讯视频等成为第一波受益者。

以微信读书为例,微信输入法目前尚未入驻各大手机应用商店,也没有预装在微信APP内,却在微信读书APP的首页醒目位置,放出全网唯一的下载链接,搭配“首字母搜书更方便”的slogan,将微信与其他业务进一步连通的意味十分明显。

此前,微信作为腾讯最大的流量池,一直承担着给其他业务导流的重任,先后开辟了小程序、发现、搜索、微信支付九宫格等入口。但用户仍然需要通过主动点击、搜索或扫码,才能在不同场景下打开和使用腾讯系的各个产品。

相比之下,利用输入法内置功能,在用户输入关键词的同时弹出小卡片,用户触达路径大幅缩短,有望提高腾讯产品服务的露出频次和跳转效率,并融入私聊、群聊和朋友圈分享等场景,获得更多社交传播流量。

对于上半年业绩放缓的腾讯而言,微信此举称得上雪中送炭。通过输入法进一步释放微信社交流量,有助于提高整个流量池的复用效率,并从存量用户身上挖掘更多商业价值,为腾讯重启增长引擎提供宝贵燃料。

在腾讯内部,微信的战略地位超然,不必为短期利益折腰;但作为集团的一部分,它也有“提携”兄弟姐妹的道义。随着腾讯乃至整个中国互联网回归慢速增长,微信将面临更多压力和取舍;视频号已经被明确寄予了商业化的重任,微信输入法给其他业务导流,则体现了微信对腾讯迫切需求的明确响应。

另一方面,在输入法这样的工具型产品中推荐腾讯自家业务,势必会对用户体验造成影响,怎样在两种维度的价值追求之间小心翼翼地寻求平衡,这是张小龙和微信团队面临的最大课题。乐观地看,对于在“简单”和“生态”之间的平衡,微信团队的经验可能比国内国外任何产品都要丰富;不过,平衡失败的功能也不少。总而言之,在给其他业务导流这件事上,微信输入法力度有多大、最终会走多远,仍有许多变数。

A

微信自己做输入法,初心是解决用户数据滥用问题。

目前,国内手机输入法市场主要被搜狗、百度、讯飞等公司产品占据。它们通过出厂预装和引导手段,促使用户开通各类信息权限,精准投放广告、赚取商业利益。这一顽疾几经整治,至今仍然存在,且在安卓手机上尤为明显。

作为一款即时通信APP,微信是输入法高频使用场景,对于第三方APP的猫腻心知肚明。在2021年1月的微信公开课上,张小龙讲了几乎一整场视频号后,结尾部分画风一转,宣布微信要做输入法。

张小龙称,微信原来并没有做输入法的念头,但“平时收到特别多的投诉,‘微信你是不是暴露我们的聊天记录了’”。他表示,微信不会查看或长期保留聊天记录;至于为什么用户在微信里说过什么、等会儿就收到广告,“只有业界一些人才能知道这个是怎么回事”。

微信输入法由此上马。三个月后,这一新功能以微信插件的形式启动内测,随后几个月间不定期开放,但整体规模一直很小。

产品形态上,插件版微信输入法十分简陋,仅支持全键盘和九宫格输入,其余常见功能一概欠奉,甚至连剪贴板都尚未加入,只能算是半成品。

不过,这款仍处于开发早期的输入法,十分醒目地加入了“完全体验模式”和“隐私保护模式”:前者会把部分输入数据上传至云端,以提供更完善的功能和更精准的输入体验;后者则不会上传。这与张小龙对于输入法用户隐私的关切形成呼应。

一年多后,微信输入法以独立APP的形态再次出现在公众视野。完全体验模式被拼写Plus取代;而超过500MB的安装包,也让微信输入法的功能和易用性得到了提升。

与插件版相比,APP版微信输入法的最大区别在于,它在获得用户许可后,不仅将输入数据用于改善输入体验本身,还用在了与腾讯其他产品的联动上。用户在聊天中提到某首歌、某部电影,输入法就会把相关链接推送到眼前。

用户输入什么就会被推荐什么,这一链路与张小龙当初的吐槽已经十分形似。但需要指出的是,这一行为并不等同于数据滥用。

根据行业经验,输入法的数据滥用通常不为人所知,且主要出现在跨APP使用场景下。比如,用户在某一聊天软件中提到想买iPhone,旋即在另一款电商APP中看到苹果公司的广告,就是典型的滥用案例。

相比之下,微信输入法推荐的功能小卡片,可被视为基于输入关键词的富媒体搜索结果,而非基于大数据的算法推荐。这些小卡片只能在微信内部使用;目前没有迹象表明,微信输入法会把数据分享给腾讯其他产品服务,更不用说集团以外的第三方。

即便如此,从一些细节仍可以看出,腾讯对于这款输入法的态度格外谨慎。

例如,微信输入法的拼写Plus功能需要手动开启,并提示用户需要使用网络权限,并上传一部分数据至云端。相比之下,不少输入法默认开启联网功能,而许多用户对此没有感知,在中老年人群中更是如此。

另外,根据一些用户和媒体的测试,微信输入法在未开启拼写Plus时,会尝试依靠本地历史数据来实现智能纠错、高频词组输入等功能,用户可以手动清除这些数据。这也让用户不必联网,就能获得大体完整和一致的输入体验。

B

然而,拼写Plus的加入,仍然暗示着微信及张小龙的某种妥协。

作为国内互联网顶级的产品经理,张小龙素以“洁癖”著称。在去年的微信公开课上,他用了两个词来描述微信的过去十年,一是“连接”,二是“简单”。

按照张小龙的解释,“简单”的内涵包括美观、实用、合理、优雅等。他认为,如今的微信比十年前多了很多功能,但都是用最简单的方法实现。

“简单的东西才最好用,简单的目标是一个最高的目标,特别难做到。”张小龙说。

作为张小龙点名的新品,插件版微信输入法的不少设计也体现了上述思考。比如,它的用户界面和交互方式与iPhone自带输入法几乎完全一致,苹果用户可以无缝迁移;它默认关闭联网功能,强调用户隐私,而这同样是苹果输入法并不好用却拥趸众多的重要原因。

张小龙

到了最新推出的APP版,微信输入法在大多数地方继承了插件版的优点,同时加入了拼写Plus。它的确能够满足一些用户的需求,但并非一款合格输入法的必备模组,与“简单”的追求并不完全相容,是一款略微偏离了张小龙哲学的产品。

但站在腾讯集团的视角上,一款能够给其他业务导流的微信输入法,或许才是符合公司当前需求的好产品。

腾讯正面临着增长难题。今年第二季度,腾讯营收为1340亿元人民币,同比下滑3%;非国际通用会计准则下,净利润281亿元,同比下滑17%。四大业务板块中,只有金融科技和企业服务略有增长,增值服务和网络广告均出现下滑。

用户规模止步不前,是腾讯业绩平淡的重要原因。以在线影音服务为例,截至今年6月底,腾讯视频的付费用户相比去年底下滑1.6%,腾讯音乐增长3.8%,基本原地踏步。

对于这些面向C端消费者的业务来说,要想摆脱困境、重回增长轨道,立竿见影的手段之一就是注入流量。拥有近13亿月活跃用户的微信(包括WeChat),自然要扛起重担。

在此之前,微信已经给姊妹业务开辟多种入口,但大都埋藏较深,用户常常需要手动搜索才能找到,导流效果可想而知。

比如,在微信内搜索周杰伦新歌《最伟大的作品》,搜索结果页面排名靠前的是聊天记录;用户需要点击“搜索”栏目,在二级页面的音乐板块找到QQ音乐小程序入口,进入后才能播放或分享。

相比之下,微信输入法把整个路径缩短为“输入关键词—弹出小卡片—点击发送”,用户能够在聊天窗口内完成从查询到使用、分享的一整套流程。使用体验的改善,有助于提升微信用户使用腾讯其他服务的频次,从而让腾讯影音书等板块得到快速提振。

这也不禁令人猜测,除了腾讯自家产品,微信输入法未来是否会给更多第三方服务导流,并从中获取收入。

目前,微信已经给腾讯的盟友开辟流量管道:发现页的“购物”给了京东,服务页的九宫格给了美团、拼多多、唯品会等。这些公司的小程序、公众号、视频号等平台内基础设施已经十分完备,若要借道微信输入法切入私聊和群聊场景,技术层面并无难度。

字母榜就上述问题向腾讯求证,截至发稿时未获有效回应。

C

微信输入法尚处于内测阶段,但从近期全网热度来看,倘若这款产品正式上线,它有很大机会迅速成为主要玩家之一,动摇手机输入法市场格局。

目前,国内手机输入法市场主要被搜狗、百度和讯飞占据,三者合计份额超过9成。但它们高度依赖手机厂商的预装,比如华为、vivo预装的是百度输入法,OPPO选择了搜狗,而小米同时内置了上述三款产品。这类合作并非独占,且需要每年支付一笔不菲费用。搜狗们打下一片江山,靠的是流向手机厂商的真金白银。

然而,微信输入法背靠微信生态,不需要看手机厂商的脸色,甚至无需投入应用商店买量费用,就能依靠强大的品牌效应获得庞大下载量。面对这种降维打击,搜狗等老牌选手很难找到应对之策。

这也意味着,微信输入法未来的唯一对手,就是它自己。

对于腾讯而言,站在集团角度,它可能期望微信输入法尽快完成测试,向公众全量开放。微信社交流量池是腾讯的核心资产;在自家输入法中推荐关联产品,如果能够在不过度影响用户体验的前提下,将流量输出到微信内外的更多场景中,实现流量复用和存量用户增值,微信也有机会从中获得一些商业化收入,可谓一举两得。

但对于微信而言,情况要复杂得多。

微信输入法推荐的小卡片,直接触碰了微信最核心的聊天场景,且以变相外链的方式进行传播。而对于这一做法,微信的管制一向格外严厉,即使是自家人也无法获得豁免。

早在2019年底,微信调整外链管理规范,在列举部分违规情形时,出人意料地点名腾讯新闻APP;而在2021年1月,微信又发布公告称,已经对多款产品的违规外链进行限制,QQ音乐和QQ浏览器位列其中。

姊妹业务尚且如此,“外人”自然一视同仁。截至目前,腾讯投资的企业中,美团、京东、拼多多、知乎、小红书等均曾被微信限制分享外链,其中不少被封禁至今。

如此严厉地整治违规外链,足见微信对于聊天这一底层体验的珍视。而在输入法内植入其他服务,并将触角伸入私聊和群聊,显然与这种一以贯之的态度不符。

另一方面,尽管微信输入法是由张小龙亲自扶上马,但对于微信而言,这款产品并非必选项。用户使用哪种输入法,并不会对微信本身的体验构成实质影响。微信很可能并不急于将这款产品推而广之。

但整个集团面临的增长压力,还是让微信感受到了迫切性。腾讯8月中旬发布上半年业绩,增长放缓已成事实;不到半个月后,微信输入法突然传出灰度测试。

在微信诞生后的第十一个年头,张小龙的“简单”哲学面临着务实主义的修正。通过微信输入法这一不起眼的新产品,微信把流量阀门又松了一点点。这道阀门之后是重新拧紧,还是加大输出,不仅要看张小龙和微信的想法和意愿,也将受到腾讯境遇变迁的长期影响。

参考资料:

科技狐,《王炸,微信输入法来了》

Tech星球,《微信十周年 张小龙1.6万字2小时演讲完整版实录》

人人都是产品经历,《微信更新,干掉手机输入法》

消金界,《拆解财报,腾讯重回巅峰有戏吗?》

雷科技,《2021年,已经无人关注手机输入法?》

2022全新正则表达式手册来了,程序员&运维人员必备宝典

Linux系统中经常会利用一些特殊的符号字符来表示一些特定含义的内容,便于数据检索和数据匹配。

系统通配符号介绍

1、系统通配符号简介

通配符号简单来说,就是键盘上的一些特殊符号,可以实现某些特殊的功能。

例如:用来模糊搜索系统中的文件,使用通配符号 * 和 ?字符来代替一个或多个真正的实际字符,从而提高检索效率

利用通配符可以在Linux命令行或bash脚本中轻松匹配或查找所需的文件,以提高工作效率。

通配符也是bash的内置功能,几乎适用于所有的Linux环境,常用的通配符号如下:

序号

符号

解释说明

01

*

匹配任意(0个或多个)字符或字符串,包括空字符串

02

匹配任意1个字符,有且只有一个字符

03

[abcd]

匹配abcd中任何一个字符,abcd也可是其他任意不连续字符

04

[a-z]

匹配a到z之间的任意一个字符,字符前后要连续,也可以用连续数字,即[1-9]

05

[!abcd]

表示不匹配括号里面的任何一个字符,也可写为[!a-d],这里的!号可以用^替代,即adbcd

06

{}

表示用于生成字符序列信息以及组合序列,结合$符号使用可以用于识别变量信息

2、系统通配符号详述

01. *号的作用详述与实践

在Linux命令行通配符中,*号的意思是匹配所有(0到多个)字符;

在查找某一类文件时特别方便,在命令行中是十分常用的符号。

实践操作:

环境准备:

tiki wiki[xiaoQ@xiaoq ~]$ mkdir test[xiaoQ@xiaoq ~]$ cd test[xiaoQ@xiaoq test]$ touch xiaoQ.txt xiaoT.txt test.txt[xiaoQ@xiaoq test]$ touch xiaoC.sh[xiaoQ@xiaoq test]$ lstest.txt xiaoC.sh xiaoQ.txt xiaoT.txt-- 3个txt结尾的文件,1个sh结尾的文件

实践情况-01:查看所有结尾为txt的文件

tiki wiki[xiaoQ@xiaoq test]$ ls *.txttest.txt xiaoQ.txt xiaoT.txt-- 星号可以用于匹配任意开头信息,以指定信息结尾的文件

实践情况-02:查看所有结尾为sh的文件

tiki wiki[xiaoQ@xiaoq test]$ ls *.shxiaoC.sh-- 星号可以用于匹配任意开头信息,以指定信息结尾的文件

实践情况-03:查看所有开头为xiao的文件

tiki wiki[xiaoQ@xiaoq test]$ ls xiao*xiaoC.sh xiaoQ.txt xiaoT.txt-- 星号可以用于匹配任意结尾信息,以指定信息开头的文件

实践情况-04:查看所有中间为iao的文件

tiki wiki[xiaoQ@xiaoq test]$ ls *iao*xiaoC.sh xiaoQ.txt xiaoT.txt-- 星号可以用于匹配任意字符信息,以含有指定字符信息的文件

实践情况-05:查看所有隐藏文件和含有空格的文件

tiki wiki# 查找指定隐藏文件信息[xiaoQ@xiaoq test]$ touch .xiaoA .xiaoB [xiaoQ@xiaoq test]$ ls ./.*./.xiaoA ./.xiaoB./.:test.txt xiaoC.sh xiaoQ.txt xiaoT.txt./..:readme test[xiaoQ@xiaoq test]$ ls ./.x*./.xiaoA ./.xiaoB# 查找含有空格字符文件[xiaoQ@xiaoq test]$ touch 'xiao X.txt' [xiaoQ@xiaoq test]$ ls xiao*X.txtxiao X.txt

02. ?号的作用详述与实践

在Linux命令行通配符中,?号代表的是任意一个字符(有且只有一个),这个字符在实际工作中运用不多。

实践操作:

实践情况-01:查看所有结尾为.sh的文件

[xiaoQ@xiaoq test]$ lstest.txt xiaoC.sh xiaoQ.txt xiaoT.txt xiao X.txt[xiaoQ@xiaoq test]$ ls ?.shls: cannot access ?.sh: No such file or directory[xiaoQ@xiaoq test]$ touch a.sh b.sh c.sh[xiaoQ@xiaoq test]$ ls ?.sha.sh b.sh c.sh[xiaoQ@xiaoq test]$ ls ?????.shxiaoC.sh

03. [abcd]的作用详述与实践

在Linux命令行通配符中 [] 这个符号里面可以加abcd等0到多个字符,表示匹配abcd的任意一个字符中有且只有一个

实践操作:

实践情况-01:查看所有结尾为.sh的文件

[xiaoQ@xiaoq test]$ ls ?.sha.sh b.sh c.sh[xiaoQ@xiaoq test]$ ls [abcd].sh-- 匹配 .sh结尾的,且前面必须包含a b c d四个字符中的任意一个a.sh b.sh c.sh[xiaoQ@xiaoq test]$ touch ab.sh[xiaoQ@xiaoq test]$ ls [abcd].sha.sh b.sh c.sh-- ab表示两个字符,并不会被中括号中的内容匹配[xiaoQ@xiaoq test]$ ls xi[abcd]oC.shxiaoC.sh-- 匹配oC.sh结尾,开头是xi,之后是a b c d中的任意一个

04. [a-z] 的作用详述与实践

[]这个符号里面的a-z,表示匹配a到z的任意一个字符(有且只有一个),a-z要表示连续,也可以连续数字信息

例如:[1-9]表示的就是匹配1到9中的任意一个字符

实践操作:

实践情况-01:查看所有结尾为.sh的文件

[xiaoQ@xiaoq test]$ ls *.shab.sh a.sh b.sh c.sh xiaoC.sh[xiaoQ@xiaoq test]$ ls [a-z].sh-- 匹配 .sh结尾,前面值包含a-z之间的任意一个字符a.sh b.sh c.sh[xiaoQ@xiaoq test]$ ls [a-z]?.sh-- 匹配a到z之间包含的任意一个字符开头,后面任意1个字符,最后以.sh结尾的文件ab.sh[xiaoQ@xiaoq test]$ ls [a-z]????.shxiaoC.sh-- 匹配a到z之间包含的任意一个字符开头,后面任意4个字符,最后以.sh结尾的文件[xiaoQ@xiaoq test]$ touch 1 2[xiaoQ@xiaoq test]$ ls [1-9]-- 匹配1到9之间的任意一个数字1 2

05. [!abcd] 的作用详述与实践

[!abcd]表示匹配除了abcd四个字符以外的任意一个字符(有且只有一个),也可写成abcd或a-d

实践操作:

实践情况-01:查找非abcd的单个字符的文件

[xiaoQ@xiaoq test]$ touch a b c d e f[xiaoQ@xiaoq test]$ ls ?1 2 a b c d e f[xiaoQ@xiaoq test]$ ls [!abcd]-- 匹配包含a b c d任意字符以外的单个字符文件1 2 e f[xiaoQ@xiaoq test]$ ls [^abcd]-- 匹配包含a b c d任意字符以外的单个字符文件1 2 e f[xiaoQ@xiaoq test]$ ls [^a-d]-- 匹配包含a b c d任意字符以外的单个字符文件1 2 e f[xiaoQ@xiaoq test]$ ls [^1-9]-- 匹配包含1到9任意字符以外的单个字符文件a b c d e f

综合练习:

练习-01:查找/etc/目录包含hosts字符串的所有文件

[root@xiaoq ~]# find /etc/ -type f -name "*hosts*"/etc/hosts/etc/hosts.allow/etc/hosts.deny

练习-02:查找/etc目录下的所有文件,文件名的第一个字符为任意字符,第二字符为o p q中的任意一个,第三个字符不能在a到r之间,结尾是ts

[root@xiaoq ~]# find /etc/ -type f -name "?[opq][^a-r]ts"/etc/hosts

06. {}的作用详述与实践

{}在系统中可以用于生成默认字母或数值序列,还可以实现序列信息的组合,以及可以实现加载变量信息

实践操作:

实践情况-01:利用{}生成字符序列信息

# 连续序列[root@xiaoq ~]# echo {1..9}1 2 3 4 5 6 7 8 9[root@xiaoq ~]# echo {a..k}a b c d e f g h i j k# 间隔序列[root@xiaoq ~]# echo {1..9..2}1 3 5 7 9[root@xiaoq ~]# echo {a..k..2}a c e g i k[root@xiaoq ~]# echo {a,f,1,3}a f 1 3

实践情况-02:利用{}实现字符信息组合

[root@xiaoq ~]# echo {1,2}{a,b}1a 1b 2a 2b[root@xiaoq ~]# echo 1{a,b}1a 1b[root@xiaoq ~]# echo {1,2}a1a 2a# 利用序列组合可以实现数据快速备份[root@xiaoq ~]# touch /etc/sysconfig/xiaoQ.conf[root@xiaoq ~]# cp /etc/sysconfig/xiaoQ.conf{,.bak}# 利用序列组合可以实现数据快速还原[root@xiaoq ~]# mv /etc/sysconfig/xiaoQ.conf{.bak,}mv: overwrite ‘/etc/sysconfig/xiaoQ.conf’? y

实践情况-03:将变量括起来作为变量的分割符

[root@xiaoq ~]# num=6[root@xiaoq ~]# echo $num6[root@xiaoq ~]# echo $num_info-- 输出为空,系统将num_info作为变量了[root@xiaoq ~]# echo ${num}_info-- 将变量num括起来单独作为变量,后边_info当成正常字符信息,即可实现信息输出6_info

系统特殊符号介绍

1、系统特殊符号简介

相比通配符号来说,Linux特殊符号更加复杂多样,且杂乱无章;因此,为了初学者便于记忆掌握,做了一定分类

系统基础类型特殊符号:; # | $

引号类型相关特殊符号:'' "" `` 无引号

重定向类型的特殊符号:> >> < << 及特殊情况

切换路径相关特殊符号:~ - . ..

判断逻辑相关特殊符号:&& || !

01.系统基础特殊符号

序号

符号

解释说明

01

;

表示一个命令的结束,也是命令间的分隔符

02

#

表示注释内容,是用来给管理员看的,系统不会执行以#好开头的内容 root用户的命令提示符

03

|

表示管道符号,将一个命令处理后的结果内容输出给下一个命令继续处理

04

$

字符串前加$符号,代表字符串变量内容 代表普通用户的命令提示符

分号的介绍与实践

在Linux命令行中,分号表示一个命令的结束,也是命令间的分隔符;

在有些配置文件中,以分号开头的内容代表注释,例如在keepalived.conf高可用配置中就是如此:

实践操作作用演示:

[root@xiaoq ~]# ll /test -dls: cannot access /test: No such file or directory[root@xiaoq ~]# mkdir /test ; cd /test ; pwd-- 同时执行多个命令:创建指定目录,进入指定目录,并查看所在路径/test[root@xiaoq test]# ll /test/ -ddrwxr-xr-x 2 root root 6 Jan 12 21:39 /test/

井号的介绍与实践

在Linux系统的配置文件中,经常会看到以井号开头的内容,表示后面的注释内容,这部分内容是管理员看的;

系统不会执行以井号开头的内容。

实践操作作用演示:

# 正常编写脚本文件,并触发执行脚本文件[root@xiaoq ~]# cat test_#.sh echo xiaoQ linuxecho xiaoQ pythonecho xiaoQ network[root@xiaoq ~]# sh test_#.sh xiaoQ linuxxiaoQ pythonxiaoQ network# 将脚本文件指定内容加井号注释,再执行脚本文件[root@xiaoq ~]# cat test_#.sh echo xiaoQ linux# echo xiaoQ python#echo xiaoQ network[root@xiaoq ~]# sh test_#.sh xiaoQ linux-- 执行没有井号开头的行会被系统识别

系统中除了脚本文件或代码文件中会用到井号作为注释信息,一些配置文件也会使用井号作为注释信息:

[root@xiaoq ~]# tail /etc/ssh/sshd_config # override default of no subsystemsSubsystem sftp /usr/libexec/openssh/sftp-server# Example of overriding settings on a per-user basis#Match User anoncvs# X11Forwarding no# AllowTcpForwarding no# PermitTTY no# ForceCommand cvs server

管道符的介绍与实践

在Linux系统命令行中,管道符是极其重要的符号,类似于生活中的管道作用,只不过Linux管道里传输的是数据流;

在实际命令行中,命令处理后在并未得到想要的结果前,可以将数据交给其他命令继续处理,直到得到最终结果为止

一般在命令和命令之间就需要用管道衔接将数据流发过来进行处理。

实践操作作用演示:

[root@xiaoq ~]# ifconfig eth0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.101 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::d349:f92:2e8e:dc7e prefixlen 64 scopeid 0x20<link> :: ether 00:0c:29:19:74:65 txqueuelen 1000 (Ethernet) RX packets 1043 bytes 95395 (93.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 882 bytes 110951 (108.3 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0[root@xiaoq ~]# ifconfig eth0|grep 10.0.0 inet 10.0.0.101 netmask 255.255.255.0 broadcast 10.0.0.255

美元符的介绍与实践

在Linux系统命令行或shell脚本程序中,在字符串前加$符号,代表的是字符串变量的内容。

实践操作作用演示:

[root@xiaoq ~]# echo $OLDPWD/test[root@xiaoq ~]# echo $PWD/root[root@xiaoq ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@xiaoq ~]# xiaoQ=1[root@xiaoq ~]# echo $xiaoQ1

02.引号类型特殊符号

序号

符号

解释说明

01

单引号 ''

所见即所得,即输入单引号内容时会将单引号内的所有内容都原样输出; 或者描述为单引号里面看到的是什么就会输出什么,称为强引用

02

双引号 ""

输出双引号内的所有内容时,如果内容中有变量、特殊字符等信息; 会将变量、特殊字符等信息解析出结果,然后在输出,称为弱引用

03

无引号

基本和有双引号的作用功能一致;只是在有空格字符存在时,需要使用双引号; 当需要生成序列信息时,需要使用无引号情况

04

反引号

一般用于引用命令,执行的时候命令会被执行,相当于"$()" 赋值和输出都要将命令用反引号引起来

单引号的介绍与实践

简单来说,当待处理的内容用单引号引起来时,引号里面有什么内容,处理时就一直保持引号之前的内容不变。

实践操作作用演示:

[root@xiaoq ~]# echo '$PATH'$PATH[root@xiaoq ~]# echo '`date`'`date`

双引号的介绍与实践

当输出双引号内的所有内容时,会先将变量或特殊字符解释出来,然后输出最终的内容;

若在平时引用字符串时,不知如何应用引号符号,则可默认使用双引号。

实践操作作用演示:

[root@xiaoq ~]# echo "$PATH"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin[root@xiaoq ~]# echo "`date`"Thu Dec 12 00:00:07 CST 2222[root@xiaoq ~]# echo "xiaoQ"xiaoQ

无引号的介绍与实践

不使用引号的功能与双引号类似,但由于没有引号,在引用字符串信息时,很难确定字符串的边界;

因此很容易出现各种未知的操作错误,所以建议处理字符串内容是建议使用双引号替代不加引号情况

实践操作作用演示:

[root@xiaoq ~]# echo "dir info $PWD"dir info /root[root@xiaoq ~]# echo dir info $PWDdir info /root-- 输出加载指定信息,无引号和双引号功能类似[root@xiaoq ~]# xiaoQ=linux 123-bash: 123: command not found[root@xiaoq ~]# xiaoQ="linux 123"-- 变量赋值时,字符串中有空格出现无引号情况无法确认边界情况,会赋值报错[root@xiaoq ~]# echo {1..5}1 2 3 4 5[root@xiaoq ~]# echo "{1..5}"{1..5}-- 加载{}生成序列信息时,是不需要使用双引号的

反引号的介绍与实践

简单来说,当将带处理的字符串用反引号引起来的时候,系统会先将反引号里字符串当做命令进行解析识别;

然后针对解析后的结果做进一步的处理。反引号一般用于引用命令,执行的时候命令会被执行,等价于$()。

实践操作作用演示:

[root@xiaoq ~]# dateThu Dec 12 00:00:21 CST 2222[root@xiaoq ~]# echo datedate[root@xiaoq ~]# echo `date`Thu Dec 12 00:00:40 CST 2222-- 可以识别解析命令信息[root@xiaoq ~]# echo `aa`-bash: aa: command not found-- 反引号中只能解析识别有效的命令[root@xiaoq ~]# host_info=`hostname`[root@xiaoq ~]# echo $host_info xiaoq.edu-- 做赋值操作时,也可以使用反引号解析命令后的结果再赋值[root@xiaoq ~]# cp /etc/hosts /data/hosts-`date %F`[root@xiaoq ~]# ll /data/hosts-`date %F`-rw-r--r-- 1 root root 180 Dec 12 00:02 /data/hosts-2222-12-12-- 企业中做数据备份时,经常会用到反引号

03.重定向类型特殊符号

重定向是Linux里的一个重要名词,对于它的作用,就是类似于生活中的漏斗一样;

可以让数据从一个地方无损失地流到另一个地方。

序号

名称

解释说明

01

标准输入(stdin)

代码为0,配合<或<<使用 数据流从右向左

02

标准输出(stdout)

代码为1,配合>或>>使用 数据流从左向右

03

标准错误(stderr)

代码为2,配合2>或2>>使用 数据流从左向右

详细类型解读

01

标准输入重定向

0<或< 清空已有内容,数据一般从文件流向处理命令

02

追加输入重定向

0<<或<< 追加内容到底部,数据一般从文件流向处理命令

03

标准输出重定向

1>或> 正确输出重定向到文件,会清空已有的内容

04

标准输出追加重定向

1>>或>> 将内容追加重定向到文件底部,不会清空已有的内容

05

错误输出重定向

2> 将标准错误内容重定向到文件,如果文件存在内容则清空

06

标准错误输出追加重定向

2>> 将标准错误内容追加到文件底部,不会清空已有的内容

标准输入介绍与实践

利用标准输入,可以将指定的文件内容信息调取出来,让命令进行加载处理,可以是覆盖输入或追加输入;

# 标准输入方式读取文件内容[root@xiaoq ~]# echo 1 2 3 > xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt 1 2 3[root@xiaoq ~]# cat<xiaoQ.txt1 2 3[root@xiaoq ~]# cat 0<xiaoQ.txt1 2 3# 标准输入方式处理文件内容[root@xiaoq ~]# tr " " "n" <xiaoQ.txt 123[root@xiaoq ~]# xargs -n 1 <xiaoQ.txt 123[root@xiaoq ~]# mail -s '邮件标题' 邮件地址 <邮件内容(文件)[root@xiaoq ~]# mail -s 'test mail' xiaoQ@qq.com </etc/hosts# 标准输入追加重定向[root@xiaoq ~]# cat <<EOFxiaoQEOFxiaoQ-- 读入数据输出到屏幕[root@xiaoq ~]# cat >xiaoQ.txt<<EOF> xiaoQ> xiaoA> xiaoB> EOF-- 读入数据输出到指定文件[root@xiaoq ~]# cat xiaoQ.txt xiaoQxiaoAxiaoB

标准输出介绍与实践

利用标准输出,可以将指定的数据内容信息输出到指定文件中,实现对特定数据信息的永久保留,便于分析查看;

# 标准输出重定向[root@xiaoq ~]# echo "123" 1>xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt 123[root@xiaoq ~]# mkdir -v /test_dir >xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt mkdir: created directory ‘/test_dir’# 可以实现清空文件数据内容[root@xiaoq ~]# cat xiaoQ.txt 123[root@xiaoq ~]# cat /dev/null >xiaoQ.txt 或者[root@xiaoq ~]# >xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt -- 清空文件操作,多用于对系统日志文件清理操作# 标准追加输出重定向[root@xiaoq ~]# echo 123 >>xiaoQ.txt[root@xiaoq ~]# echo 456 >>xiaoQ.txt[root@xiaoq ~]# echo 789 >>xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt 123456789

错误输出介绍与实践

利用错误输出,可有将指定命令或程序执行过程中出现的错误提示信息输出到指定文件中,便于对操作进行复盘;

[root@xiaoq ~]# mkdir /test_dirmkdir: cannot create directory ‘/test_dir’: File exists[root@xiaoq ~]# mkdir /test_dir 2> xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt mkdir: cannot create directory ‘/test_dir’: File exists

标准输出与错误输出结合使用:(生成日志文件的机制)

# 方法一:1>>文件 2>>文件[root@xiaoq ~]# mkdir -v /test_dir 1>>xiaoQ.txt 2>>xiaoQ.txt[root@xiaoq ~]# mkdir -v /test_dir 1>>xiaoQ.txt 2>>xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txt mkdir: created directory ‘/test_dir’mkdir: cannot create directory ‘/test_dir’: File exists# 方法二:2>&1[root@xiaoq ~]# mkdir -v /test_dir >>xiaoQ.txt 2>&1[root@xiaoq ~]# mkdir -v /test_dir >>xiaoQ.txt 2>&1[root@xiaoq ~]# cat xiaoQ.txt mkdir: created directory ‘/test_dir’mkdir: cannot create directory ‘/test_dir’: File exists# 方法三:&>> ※[root@xiaoq ~]# mkdir -v /test_dir &>>xiaoQ.txt[root@xiaoq ~]# mkdir -v /test_dir &>>xiaoQ.txt[root@xiaoq ~]# cat xiaoQ.txtmkdir: created directory ‘/test_dir’mkdir: cannot create directory ‘/test_dir’: File exists

知识点总结:

标准输入:表示将数据从文件中流入到处理的命令中,用代码0表示,使用<或<<符号来指示数据的流向;

标准输出:表示将命令处理的信息输出到指定文件中,用代码1表示,使用>或>>符号来指示数据的流向;

错误输出:表示将命令操作错误的信息输出到文件中,用代码2表示,使用2>或2>>符号来指示数据的流向;

04.路径切换特殊符号

序号

符号

解释说明

01

~

快速切换到用户的家目录,超级用户为root;普通用户为/home/用户名称目录;

02

-

切换到上一次(相对当前路径)用户所在的路径

03

.

代表当前目录(点号还有很多其他含义,需要注意)

04

..

代表上一级目录

波浪线介绍与实践

在Linux系统命令行中,~代表用户的家目录:

实践操作作用演示:

[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd ~[root@xiaoq ~]# pwd/root[root@xiaoq ~]# cd /etc/[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd-- cd命令后什么信息都不加,也等价于cd ~作用[root@xiaoq ~]# pwd/root

短横线介绍与实践

在Linux系统命令行中,短横线代表上一次用户所在的路径。

实践操作作用演示:

# 操作过程演示[root@xiaoq ~]# cd /etc/[root@xiaoq etc]# [root@xiaoq etc]# cd -/root[root@xiaoq ~]# pwd/root[root@xiaoq ~]# cd -/etc[root@xiaoq etc]# pwd/etc# 操作过程机制[root@xiaoq ~]# echo $OLDPWD/etc[root@xiaoq ~]# cd -/etc[root@xiaoq etc]# echo $OLDPWD/root[root@xiaoq etc]# cd $OLDPWD[root@xiaoq ~]# pwd/root

点符号介绍与实践

在Linux系统命令行中,点号代表当前目录。

实践操作作用演示:

[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd .[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# find . -name "*.sh" ./dhcp/dhclient-exit-hooks.d/azure-cloud.sh[root@xiaoq etc]# rm ./xiaoQ* -rf

双点号介绍与实践

在Linux系统命令行中,双点号代表当前目录的上一级目录。

实践操作作用演示:

[root@xiaoq etc]# pwd/etc[root@xiaoq etc]# cd ..[root@xiaoq /]# pwd/[root@xiaoq /]# ls -a /test_dir/. ..

05.逻辑相关特殊符号

序号

符号

解释说明

01

&&

前一个命令执行成功,再执行后面一个命令

02

||

前一个命令执行失败,再执行后面一个命令

03

!

在命令执行中有取反作用 find . ! -name "xiaoQ" 在vi/vim中表示强制作用 wq! 在命令前加!表示找出最近一次以指定开头的命令并执行(慎用)

逻辑符号多用于后续课程的shell脚本编写中,命令行应用情况比较少见,此时作为了解即可。

逻辑符号&&介绍与实践

在Linux系统中表示,判断前一个操作是否成功,如果成功再进行后续的操作;

[root@xiaoq /]# # 有钱 -- 买房[root@xiaoq /]# rm -rf /test_dir/[root@xiaoq /]# mkdir /test_dir && cd /test_dir-- 创建目录成功后,才会切换目录[root@xiaoq test_dir]# pwd/test_dir[root@xiaoq test_dir]# cd [root@xiaoq ~]# mkdir /test_dir && cd /test_dir/mkdir: cannot create directory ‘/test_dir’: File exists-- 创建目录失败后,就不会切换目录[root@xiaoq ~]# [root@xiaoq ~]# mkdir /test_dir ; cd /test_dir/mkdir: cannot create directory ‘/test_dir’: File exists-- 对比分号操作,分号分割的多个命令,没有逻辑概念,会同时执行

逻辑符号||介绍与实践

在Linux系统中表示,判断前一个操作是否失败,如果失败再进行后续的操作;

[root@xiaoq ~]# mkdir /test_dir || echo "dir create error" ||mkdir: cannot create directory ‘/test_dir’: File existsdir create error-- 创建失败,会执行的操作[root@xiaoq ~]# rm /test_dir/ -rf[root@xiaoq ~]# mkdir /test_dir || echo "dir create error" ||-- 创建成功,就不会执行指定操作

逻辑符号组合使用情况

判断成功和判断失败逻辑符号也可以组合使用,实现多种情况的灵活处理;

[root@xiaoq ~]# # && || -- 钱 -- 有钱 && 生活轻松 没钱 || 努力奋斗 [root@xiaoq ~]# rm /test_dir/ -rf[root@xiaoq ~]# mkdir /test_dir && echo "目录创建成功" || echo "目录创建失败" ||目录创建成功-- 目录创建成功处理方案[root@xiaoq ~]# mkdir /test_dir && echo "目录创建成功" || echo "目录创建失败" ||mkdir: cannot create directory ‘/test_dir’: File exists目录创建失败-- 目录创建失败处理方法

系统正则符号介绍

1、正则符号简介说明

简单地说,正则表达式符号就是为处理大量的字符串及文本而定义的一套规则和方法;

通过这些正则符号,管理员可以快速过滤,替换或输出所需要的字符串。使运维工作更加高效。

正则表达式符号应用非常广泛,存在于各种语言之中,例如 python java go等语言中都存在;

但是Linux运维人员只要掌握bash解释器环境中的正则表达式用法即可,即可三剑客grep sed awk命令,

进行有效的应用,从而提高工作效率即可。

在学习掌握正则表达式时,需要注意以下几点:

正则表达式是以行为单位进行处理的;

正则表达式仅适用于三剑客命令加载识别(grep sed awk);

正则表达式使用时,主要LC_ALL环境变量要设置为LC_ALL=C;

2、正则符号分类介绍

Linux的正则表达式可分为两类:

基础正则表达式(BRE basic regular expression)

对应的正则符号:^$.[]*; 通常默认可以直接被三剑客命令识别;

扩展正则表达式(ERE extended regular expression)

对应的正则符号:(){}? |;三剑客命令在加载识别时,除awk命令可以直接识别,grep和sed命令都要加指定参数识别

3、基础正则符号简介

序号

基础正则符号

解释说明

01

^

尖角号,用法为"^xiaoQ",表示匹配以xiaoQ单词开头的行

02

$

美元符,用法为"xiaoQ$",表示匹配以xiaoQ单词结尾的行

03

^$

组合符,表示空行,逻辑解释就是以^结尾的行,以$开头的行

04

.

点符号,表示匹配任意一个且只有一个字符(但不能匹配空行)

05

转义符,让有特殊含义的字符还原本意;让没特殊含义字符赋予特殊含义

06

*

星符号,匹配前一个字符(连续出现)0次或1次以上 注意:当重复0次的时候,表示什么也没有,即匹配所有内容

07

.*

组合符,匹配所有内容 包含空行信息

08

^.*

组合符,匹配以任意多个字符开头的内容

09

.*$

组合符,匹配以任意多个字符结尾的内容

10

[abc]

匹配[]集合内的任意一个字符a或b或c;[abc]也可写成[a-c]

11

[^abc]

匹配不包含^号后的任意字符a或b或c,这里的^表示对[abc]取反 注意:此处不能用!替代

以上基础正则符号会分为三个部分学习01-05 06-09 10-11;要以视频操作显示的信息为主

4、基础正则符号实践

基础正则符号实践操作环境准备:

[root@xiaoq ~]# mkdir ~/test[root@xiaoq ~]# cd ~/test[root@xiaoq test]# cat >~/test/xiaoQ.txt<<EOFI am xiaoQ teacher!I teach linux. I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928. not 3052869999928.my god ,i am not xiaoB,but XIAOQEOF[root@xiaoq test]# cat -n xiaoQ.txt 1I am xiaoQ teacher! 2I teach linux. 3 4I like badminton ball ,billiard ball and chinese chess! 5my qq num is 3052869928. 6 7not 3052869999928. 8my god ,i am not xiaoB,but XIAOQ

基础正则符号功能实践-^

尖角符号表示匹配每行以指定字符开头的信息;

实践操作作用演示:输出以m开头的所有行并打印行号

[root@xiaoq test]# grep -n "^m" xiaoQ.txt 5:my qq num is 3052869928.8:my god ,i am not xiaoB,but XIAOQ

若没特殊需求,建议用双引号将过滤的内容引用起来,否则可能会遇到异常问题。

基础正则符号功能实践-$

美元符号表示匹配每行以指定字符结尾的信息;

实践操作作用演示:输出以Q结尾的所有行并打印行号

[root@xiaoq test]# grep "Q$" xiaoQ.txt my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep -i "q$" xiaoQ.txt my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "Q$" xiaoQ.txt|cat -Amy god ,i am not xiaoB,but XIAOQ$

基础正则符号功能实践-^$

实践操作作用演示:过滤出空行信息

[root@xiaoq test]# grep -n "^$" xiaoQ.txt 3: 6:

实践操作作用演示:过滤除空行以外信息

[root@xiaoq test]# grep -nv "^$" xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ

当^开头与$结尾连在一起时,解可以理解为开头到结尾中间没有任何数据内容,即表示的就是空行。

基础正则符号功能实践-.

点符号表示匹配任意一个字符(有且只有一个),但不包含空行。

实践操作作用演示:匹配任意一个字符并输出对应文件中的行号

[root@xiaoq test]# grep -n "." xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ

匹配任意一个字符,所以文件的内容都出来了,但是上面找到的内容不包含空行。

思考:点表示匹配任意字符,并且匹配且只有一个字符,怎么文件所有字符都出来了?

实践操作作用演示:显示以点结尾的行

[root@xiaoq test]# grep -n ".$" xiaoQ.txt 1:I am xiaoQ teacher!2:I teach linux.4:I like badminton ball ,billiard ball and chinese chess!5:my qq num is 3052869928.7:not 3052869999928.8:my god ,i am not xiaoB,but XIAOQ

.$表示的是以任意单个字符结尾的行,因此结果并不是需求的目标。

基础正则符号功能实践-

转义符号主要用途是让有特殊含义的符号变为一般符号,当然也可以将没有作用的字符变为有特殊意义;

实践操作作用演示:显示以点结尾的行

[root@xiaoq test]# grep -n ".$" xiaoQ.txt 2:I teach linux.5:my qq num is 3052869928.7:not 3052869999928.

实践操作作用演示:转义特殊字符信息

[root@xiaoq test]# echo "xiaoQnlinux"xiaoQnlinux[root@xiaoq test]# echo -e "xiaoQnlinux"xiaoQlinux[root@xiaoq test]# echo -e "xiaoQtlinux"xiaoQlinux

基础正则符号功能实践-*

星号表示匹配前一个字符0次或0次以上的数据内容;

实践操作作用演示:输出文件中连续出现了0次或0次以上的数字9的内容

[root@xiaoq test]# grep "9*" xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ-- 每行中没有出现9字符,就表示出现0次,也会匹配,所以所有文件内容都会显示[root@xiaoq test]# grep "9" xiaoQ.txt my qq num is 3052869928.not 3052869999928.-- 单独过滤数字9,只有含有9字符的行会出现,没有9字符(出现0次的)不会显示

基础正则符号功能实践-.*

.*组合使用时表示匹配所有字符,包含空行。

实践操作作用演示:通过grep显示文件的所有内容,包含空行

[root@xiaoq test]# grep ".*" xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "." xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ

虽然.*和. 都可以将文件中的所有信息进行匹配显示,但是还是有本质区别的,利用grep -o参数可以看出其中奥秘

[root@xiaoq test]# grep -o ".*" xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep -o "." xiaoQ.txt I am xia

grep -o参数可以将每次匹配的信息按行单独显示,具体说明每次匹配的内容。

实践操作作用演示:匹配开头所有字符,每行到o字符结束/匹配从o开始到指定最后字符结束

[root@xiaoq test]# grep "^.*o" xiaoQ.txt I am xiaoQ teacher!I like badminton ball ,billiard ball and chinese chess!not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep "o.*$" xiaoQ.txt I am xiaoQ teacher!I like badminton ball ,billiard ball and chinese chess!not 3052869999928.my god ,i am not xiaoB,but XIAOQ

已经实现了匹配任意多个字符开头一直到第一个字母o为止的内容;

但可以看出实际上匹配到了每一行的最后一个字符o,因为正则符号匹配信息以行为单位并且具有贪婪特性。

基础正则符号功能实践-[]

中括号表示匹配其中的任何一个字符,[abc]会匹配a或b或c

匹配方式有:

序号

匹配方式

解释说明

01

[a-z]

表示匹配所有单个小写字母

02

[A-Z]

表示匹配所有单个大写字母

03

[a-zA-Z]或[a-Z]

表示匹配所有单个英文字母(包含大小写所有字母)

04

[0-9]

表示匹配所有单个数字

05

[a-zA-Z0-9]

表示匹配所有字母和数字

实践操作作用演示:匹配文件中所有的大写字母

[root@xiaoq test]# grep '[A-Z]' xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my god ,i am not xiaoB,but XIAOQ

实践操作作用演示:匹配字符串xiaoQ信息

[root@xiaoq test]# grep '[xiaoQ]' xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ[root@xiaoq test]# grep 'xiaoQ' xiaoQ.txt I am xiaoQ teacher!

中括号里面的字符会单个进行匹配,并不是看成一个整体进行匹配。

基础正则符号功能实践-[^]

表示将中括号中的每个字符进行取反匹配;

实践操作作用演示:匹配除了小写字母以外的字符

[root@xiaoq test]# grep "[^a-z]" xiaoQ.txt I am xiaoQ teacher!I teach linux.I like badminton ball ,billiard ball and chinese chess!my qq num is 3052869928.not 3052869999928.my god ,i am not xiaoB,but XIAOQ

5、扩展正则符号简介

序号

扩展正则符号

解释说明

01

匹配前一个字符出现1次或多次情况

02

[ab]

匹配中括号内a或b字符出现1次或多次情况

03

?

匹配前一个字符出现0次或1次情况

04

|

表示或者,即同时过滤多个字符串

05

()

分组过滤,被括起来的内容表示一个整体

06

a{n,m}

匹配前一个字符出现最少n次,最多m次

07

a{n,}

匹配前一个字符出现最少n次

08

a{n}

匹配前一个字符出现正好n次

09

a{,m}

匹配前一个字符最多出现m次

由于以上信息为扩展正则, 利用grep命令识别扩展正则符号需要使用-E参数或者直接使用egrep命令进行过滤.

6、扩展正则符号实践

扩展正则符号实践操作环境准备:

# 测试实践环境准备:[root@xiaoq test]# cat > xiaoT.txt<<EOF> gd> god> good> goood> gooood> goooood> EOF[root@xiaoq test]# cat xiaoT.txt gdgodgoodgooodgoooodgoooood

扩展正则符号功能实践-

加号表示匹配前一个字符出现1次或1次以上情况, 与基础正则里的* 类似, 只不过比 * 少了一个匹配0次

实践操作作用演示:匹配文件中出现o字符的情况

# 匹配连续出现的o字符信息[root@xiaoq test]# grep "o*" xiaoT.txt gdgodgoodgooodgoooodgoooood-- 匹配o出现0次或连续出现多次的情况[root@xiaoq test]# grep "o " xiaoT.txt -- 扩展正则符号识别时. grep命令加-E参数或直接使用egrep命令[root@xiaoq test]# grep -E "o " xiaoT.txt godgoodgooodgoooodgoooood-- 匹配o出现1次或连续出现多次的情况

扩展正则符号功能实践-?

问号表示匹配前一个字符出现0次或1次

实践操作作用演示:匹配文件中包含gd或god的信息

[root@xiaoq test]# grep -E "go?d" xiaoT.txt gdgod-- g和d间出现0次或1次o字符情况[root@xiaoq test]# grep -E "go d" xiaoT.txt godgoodgooodgoooodgoooood-- g和d间出现1次或多次o字符情况[root@xiaoq test]# grep -E "go*d" xiaoT.txt gdgodgoodgooodgoooodgoooood-- g和d间出现0次或多次o字符情况

扩展正则符号功能实践-|

竖线在扩展正则中表示或者, 可以实现过滤多个字符信息

实践操作作用演示:只过滤文件中good和goood字符串信息

[root@xiaoq test]# grep -E "good|goood" xiaoT.txt goodgoood# 企业环境应用[root@xiaoq ~]# grep -E "faild|error" /var/log/server.log-- 分析日志文件时, 就会用到多个关键信息进行筛选匹配的情况

扩展正则符号功能实践-()

小括号表示可以实现分组过滤被括起来的内容, 括号内的信息表示一个整体

实践操作作用演示:取出包含good或glad的信息

# 测试实践环境调整:[root@xiaoq test]# echo "glad" >>xiaoT.txt [root@xiaoq test]# cat xiaoT.txt gdgodgoodgooodgoooodgooooodglad# 匹配good或glad的信息[root@xiaoq test]# grep -E "goo|lad" xiaoT.txt goodgooodgoooodgooooodglad[root@xiaoq test]# grep -E "g(oo|la)d" xiaoT.txt goodglad

扩展正则符号功能实践-{n,m} {n,} {n} {,m}

实践操作作用演示:匹配字符o, 连续出现3到5次的信息

[root@xiaoq test]# grep -E "o{3,5}" xiaoT.txt gooodgoooodgoooood

实践操作作用演示:匹配字符o, 连续最少出现3次的信息

[root@xiaoq test]# grep -E "o{3,}" xiaoT.txt gooodgoooodgoooood

实践操作作用演示:匹配字符o, 连续正好出现3次的信息

[root@xiaoq test]# grep -E "o{3}" xiaoT.txt gooodgoooodgoooood

实践操作作用演示:匹配字符o, 连续最多出现5次的信息

[root@xiaoq test]# grep -E "o{,5}" xiaoT.txt gdgodgoodgooodgoooodgooooodglad