精华内容
下载资源
问答
  • uni-app中过滤使用

    千次阅读 2020-04-13 10:00:35
    并不是我想要数据,我想到了vue中的过滤器,因为uni-app大部分语法跟vue是一样,所以想用vue的过滤器filters试试 2. 解决问题 所使用页面内添加过滤器,由于返回数据是一个对象,所以先转成字符串,...

    uni-app中过滤器的使用

    1.问题

    请求了一个新闻接口,返回的发布时间数据如下:
    在这里插入图片描述
    渲染到页面之后:
    在这里插入图片描述
    并不是我想要的数据,我想到了vue中的过滤器,因为uni-app的绝大部分语法跟vue是一样的,所以想用vue的过滤器filters试试

    2. 解决问题

    在所使用的页面内添加过滤器,由于返回的数据是一个对象,所以先转成字符串,考虑到年月日有不满两位数的时候,使用padStart(2,0)进行补全

    onLoad(){},
    filters:{
    			formatData(data){
    				const nDate=new Date(data);
    				const year = nDate.getFullYear().toString().padStart(2,0);
    				const month = nDate.getMonth().toString().padStart(2,0);
    				const day = nDate.getDay().toString().padStart(2,0);
    				return year +'-'+ month +'-'+ day
    			}
    		},
    methods:{}
    

    页面使用过滤器,用管道符连接

    <template>
    	<view class="news_detail">
    		<text class="title">{{detail.title}}</text>
    		<view class="info">
    			<text>发表时间:{{detail.add_time | formatDate}}</text>
    			<text>浏览次数:{{detail.click}}</text>
    		</view>
    		<!-- <view class="content" v-html="detail.content"></view> -->
    		<view class="content">
    			<rich-text :nodes="detail.content"></rich-text>
    		</view>
    	</view>
    </template>
    

    然后测试页面显示
    在这里插入图片描述
    显示合适了

    3. 升华一下

    在开发时我发现还有页面要渲染的时间数据也这个格式的,所以果断将过滤器filters改为全局过滤器
    在这里插入图片描述
    将filters改为全局过滤器在main.js内添加
    main.js

    import Vue from 'vue'
    import App from './App'
    Vue.filter("formatDate",(data)=>{
    	const nDate=new Date(data);
    	const year = nDate.getFullYear().toString().padStart(2,0);
    	const month = nDate.getMonth().toString().padStart(2,0);
    	const day = nDate.getDay().toString().padStart(2,0);
    	return year +'-'+ month +'-'+ day
    })
    
    Vue.config.productionTip = false
    
    App.mpType = 'app'
    
    const app = new Vue({
        ...App
    })
    app.$mount()
    
    

    页面中不需要再添加过滤器了,直接在要使用的地方用管道符链接添加即可

    <template>
    	<view>
    		<view
    			class="news_item"
    			v-for="(v,i) in data"
    			:key="i"
    			@click="navigator(v.id)"
    		>
    			<image :src="v.img_url"></image>
    			<view class="right">
    				<view class="tit">
    					{{v.title}}
    				</view>
    				<view class="info">
    					<text>发表时间:{{v.add_time | formatDate}}</text>
    					<text>浏览次数:{{v.click}}</text>
    				</view>
    			</view>
    		</view>
    	</view>
    </template>
    
    
    展开全文
  • 该存储库,将说明如何matlab导入音频文件,过滤,放大,表示它们并最终生成已处理输出音频文件。 对于此示例,将使用从NOAA-18卫星获得音频信号。 音频信号特征如下: 音频数据速率:48000 Hz或样本/...
  • 为了测试我实现,我各种上下文使用了过滤器,并检查了稳态协方差是否匹配,如[1]所述。 如果您还有其他问题或想做出贡献,请随时与zonov dot ca联系,与我联系。 该存储库将成长为各种过滤器实现大量集合...
  • 执行基于匹配的过滤,以从时间历史 z 中移除步长为 shape_period 变化幅度形状(锯齿)。 方法论分为两部分。 首先计算单个形状(锯齿)和高通滤波 z 之间点积相关性,(黄油价值,高通 fc_hi,filtered_order...
  • 把水中一部分的固体颗粒或容易沉降的杂质加以去除,但要进一步使水净化,就得利用过滤的方法,使水通过设备从上而下、由小而的不同颗粒的滤料层后,将水中的细小颗粒、胶体、有机物等杂质截留下来,从而使水...

    机械过滤器(石英砂过滤器)和多介质过滤器的区别:

    机械过滤器、多介质过滤器(石英砂过滤器)背景介绍:

    水处理的沉淀和澄清过程,把水中一部分较大的固体颗粒或容易沉降的杂质加以去除,但要进一步使水净化,就得利用过滤的方法,使水通过设备中从上而下、由小而大的不同颗粒的滤料层后,将水中的细小颗粒、胶体、有机物等杂质截留下来,从而使水得到进一步的澄清和净化,根据设备水头损失的情况或过滤器运行的时间确定过滤器的反冲时机。通过设备上所配置的各类阀体的开合对设备内部介质进行反冲洗,将沉积在介质上的杂物冲洗干净后,设备随即又进入一个新的过滤周期。

     

      机械过滤器(石英砂过滤器)也称压力过滤器,是纯水设备的前期处理,水净化系统的重要组成部分,其材质有钢衬胶或不锈钢制成。因滤器填充介质不同,用途与作用各有区别。一般有石英砂过滤器、活性炭过滤器、锰砂过滤器。根据实际情况可单独使用也可联合使用。

     

      机械过滤器(石英砂过滤器)的过滤介质是石英砂,无烟煤等。功能是滤除悬浮物、有机杂质、有机物等,降低水的浑浊度。

      过滤介质

     

      石英砂:粒度0.6~1.2mm 2~4mm 4~6mm

     

      无烟煤:粒度0.8~2.0mm

     

     

      适用范围

     

      1、 水中含有的悬浮物凝聚的片状物用沉淀等方法所不能去除的,可将水通过过滤器内所装介质,使水达到出水要求。

     

      2、 本产品适用于要求经过过滤后出水浊度一般在5mg/L以内符合工业用水和生产用水的工矿企业和城镇给水处理设施。

     

      3、 进水情况选择

     

      (1) 单层滤料用于进水浊度通常在50mg/L的水,未经混凝沉淀的原水应在过滤器前加注混凝剂。

     

      (2) 双层滤料过滤器适用与进水浊度一般在15mg/L以下,不大于20mg/L的沉淀水。

     

     

      技术参数说明

     

      1、 设计压力:6kgf/cm2,试验压力:9kgf/cm2;

     

      2、 进水温度:20℃;

     

      3、 运行流速:10m/h;

     

      4、 出水水质:进水浊度<20mg/L时,出水浊度<5mg/L;

     

      5、 反冲洗强度:石英砂15~18L/S·m2,无烟煤10~12L/S·m2,石英砂、无烟煤13~16 L/S·m2;

     

      机械过滤器(石英砂过滤器)是用于水的预处理设备之一,其原理是利用介质截留水中悬浮物使出水澄清,本设备根据装载滤料的种类分为单层、双层或三层。

     

      浊度:进水10-20mg/L 出水2-5mg/L

     

      进水<10mg/L 出水<2mg/L

    手动石英砂过滤器 (1).jpg

    展开全文
  • 这是通过将节点存储中间存储之前使用预过滤和后过滤的组合来实现的。 此外,本文的另一个贡献是介绍了整体算法最优性的新观点。 我们证明了最优性不仅取决于查询类,而且取决于XML文档的特征。 这种关于最优...
  • 本项目应用孤立森林异常检测算法,过滤JMeter 对Splunk 数据库进行压力测试过程产生异常性能数据。 背景 压力测试和性能分析过程,通常有两种情形会导致测试结果不准确: 一是由于JMeter 和LoadRunner 等...
  • 协同过滤和推荐系统文献中的大部分工作都是用户偏好是静态模式的假设下开发的。 然而,我们通过分析员工博客阅读行为的数据集表明,用户的阅读行为确实会随着时间发生变化。 我们将未观察到的用户偏好建模为隐...
  • 大部分情况我们都是这样做,当访问一个不存在key时候,设置一个带有过期时间的标志,然后放入缓存。不过这样做缺点也很明显,浪费内存和无法抵御随机key攻击。 场景二 一个黑名单系统,我们需要设置很多...
  • 随着网页动态性增加,网页不同部分在不同的时间点持有不同类型内容已成为一种普遍现象。 本文提出了一种细粒度级别上阻止内容模型,即,与其完全阻止页面,不如仅阻止那些保留了要阻止内容段,这将是...
  • 我们调查结果表明,中央 IT 成本无关紧要,因为大部分垃圾邮件成本源于员工花时间识别和删除垃圾邮件。 垃圾邮件造成工作时间损失约为每位员工每年 1,200 分钟; 通过安装垃圾邮件过滤机制,这些成本可以减少...
  • 开放式创新平台(人群共享空间发布想法网站)使我们能够为我们关心问题... 本文提出了一种称为“星包”方法,它使人群能够以与传统(李克特量表)评级方法相媲美准确度过滤想法,但只需要一小部分时间
  • 受到某些其他花哨图像过滤巨大成功启发,现在即使是最年轻和/或最没有才华科学家也可以使他们数据看起来值得经得起时间的考验。 sciencestagram(figurehandle) 是一个强大(相对较弱和有限)工具,...
  • 1)所有落参考点和范数大小无穷范数之外数据点都被立即删除,因为这计算上很便宜并且可以取出大部分区域(所有其他范数中的点都包含无穷大,所以优点被保留)。 2)然后计算剩余点范数,剔除那些落...
  • 数据仓库相似重复记录清洗对于数据质量影响很,传统基本邻近排序算法(sorted-neighborhood method,SNM)时间效率和准确率均不高。针对SNM算法缺陷,提出了一种基于长度过滤和动态容错SNM改进算法。...
  • 最初教程对于那些远离UNIX操作系统已有一段时间的用户来说是一个很好补充。 对于来自Windows®背景全新UNIX用户,它也很有用,因为它使用对Windows引用和比较。 第二个教程着重于vi文本编辑器,它是最强大...

    在你开始前

    了解对本教程的期望以及如何最大程度地利用本教程。

    关于本系列

    这个由四部分组成的教程系列从头开始涵盖UNIX®。 最初的教程对于那些远离UNIX操作系统已有一段时间的用户来说是一个很好的补充。 对于来自Windows®背景的全新UNIX用户,它也很有用,因为它使用对Windows的引用和比较。 第二个教程着重于vi文本编辑器,它是最强大(也是最神秘的)UNIX实用程序之一。 本教程教您有关使用正则表达式(包括grepsedawk的UNIX命令行过滤器的信息。

    关于本教程

    要释放UNIX命令行过滤器(如grepsedawk背后的功能,需要对正则表达式有深入的了解。 本教程向新用户教授这些实用工具的功能以及如何使用正则表达式来操纵文本。 您将通过使用带有grep简单,有趣的示例开始,然后进入sedawk真实示例。

    目标

    本教程的目的是使UNIX和Linux®用户熟悉三个功能强大的命令行工具,这些工具可用于快速有效地搜索和更改数据。 本教程的开头介绍了许多UNIX实用程序(和编程语言)的基本框架中使用的正则表达式。 以下各节提供了将正则表达式与grepsedawk一起使用的示例。

    先决条件

    您需要对本教程的命令行有基本的了解。 对于本教程的某些部分,了解如何在UNIX中使用stdinstdoutpipe处理输入和输出也很有帮助。

    系统要求

    要完成本教程,只需要在运行任何类似UNIX的操作系统的任何计算机上访问用户帐户即可。 类似UNIX的操作系统包括IBMAIX®操作系统,Linux,Berkeley软件发行版(BSD),MacOS®X(使用终端机访问命令行)以及许多其他操作系统。

    常用表达

    正则表达式是一个字符串,旨在搜索或替换另一个字符串。 乍一看,这似乎是一个非常基本的功能。 大多数用户几乎对每个图形文本编辑器或文字处理应用程序都熟悉简单的搜索和替换功能。 如果将此基本搜索和替换功能与计算器进行比较,则可以将正则表达式与成熟的计算机进行比较。 使用正则表达式作为搜索条件的功能不应被低估。

    使用正则表达式的过滤器

    一些最强大的基于UNIX的命令行工具使用正则表达式,包括grepsedawk (以及某些编程语言,包括Perl)。 学习如何使用正则表达式是从UNIX命令行的基本用户转变为真正的超级用户的必需步骤。 正则表达式语法有几种不同的版本, grepsedawk多种版本,因此本教程重点介绍在每种实现中相当标准的最常见构造。 不要忘记参考系统的man页以获取语法和命令行选项的详细信息。

    基础

    在探索使用正则表达式的UNIX应用程序之前,重要的是要学习基础知识。 在本节中,请继续阅读。 稍后,您将在grep尝试一些示例。

    基本搜索

    正则表达式使用正常字符的字符串以及指示搜索条件的特殊字符组合。 在最基本的情况下,根本不使用特殊字符。 例如,如果您只想使用术语“ golf作为搜索条件,则键入以下内容:

    golf

    这是一个正则表达式! 它搜索单词golf所有实例。 正则表达式区分大小写,因此此搜索将找到g olf所有实例,但不会找到G olf实例。

    使用括号

    要同时搜索g olfG olf ,可以使用方括号(正则表达式中的特殊字符)并列出要搜索的单个字符的字符串。 这类似于搜索内的搜索(这是正则表达式背后的魔力)。

    [Gg]olf

    相同的概念适用于任何字符列表-不仅用于区分大小写。 例如,您可能要搜索golfgelf ,这是一项新的运动,它由您组成:

    g[oe]lf

    时期

    现在,假设您还有第三项运动gilf ,您也想检查一下。 一种使用到目前为止所学知识的方法是在搜索条件中使用oei 但是随着搜索量的增长,您可能希望找到所有以g开头和以lf结尾且中间有一个字符的字符。 为此,请使用另一个特殊字符,即句点(。)。

    g.lf

    这将查找所有以g开头并以lf结尾且之间有一个字符的字符串。 要将搜索扩展到所有以g开头和以f结尾且中间有两个字符的字符串,可以使用两个句点:

    g..f

    用grep搜索文件

    现在,您已经对正则表达式背后的概念有了基本的了解,是时候开始使用实际示例了,以便您可以实际使用它们了。 您将尝试使用的第一个命令行应用程序是grep grep实际上是从正则表达式g/RE/p获得其名称的。 grep用于在一个或多个文件中搜索特定字符串的实例。 默认情况下, grep输出您的搜索字符串出现的每一行(与搜索字符串本身相反)。 如果要搜索多个文件,则grep还会输出找到该行的文件名。

    使用以下文本创建一个名为grep.txt的文件:

    I like golf. Golf is played on grass. I created gilf.

    grep的基本语法为:

    grep REGULAREXPRESSION FILENAME(S)

    基本搜索

    现在,回到正则表达式的第一个示例: golf一词本身。 要将此表达式与grep ,请输入:

    grep golf grep.txt

    此命令将搜索字符串的所有实例的grep.txt文件golf ,并输出包含该字符串的行。 您的输出应为:

    I like golf.

    使用括号

    接下来,尝试使用上面讨论的一些特殊字符。 您可以使用方括号(方括号表达式)表示您要搜索golfGolf

    grep [gG]olf grep.txt

    输出看起来像这样:

    I like golf. Golf is played on grass.

    时期

    要搜索golfgilf ,可以再次使用括号。 相反,尝试使用句点来表示您要搜索glf之间的任何字符:

    $grep g.lf grep.txt

    输出看起来像这样:

    I like golf. I created gilf.

    搜索高尔夫,高尔夫和吉尔夫

    现在,您已经找到了获取每种golf变化的方法,但是您的搜索都没有返回全部三个实例: golfGolfgilf 花点时间考虑一下如何搜索这三个。 有多种方法可以做到这一点。 这是几个例子:

    grep ..lf grep.txt grep [gG][oi]lf grep.txt

    两种方法都返回所有三行:

    I like golf. Golf is played on grass. I created gilf.

    短跑

    您能想到其他方法吗? 到目前为止,您仅学习了在正则表达式中使用的两个特殊字符。 这仅仅是开始! 一些特殊字符在其他特殊字符内使用。 例如,当您将一组字符括在方括号中时,可以使用破折号(-)搜索一系列字符。 将以下行添加到您的文本文件:

    What is g2lf?

    到目前为止,您已经了解到,如果您使用g.lfg[oi2]lf类的正则表达式,将在搜索结果中包含此行。 使用句点可返回结果,其中该位置有任何字符; 使用[oi2]返回的结果仅是o i2在该位置。 您可以使用破折号来实现第三个方法,该方法包括多个字符,但不是每个字符:

    grep g[a-z]lf

    此方法产生以下输出:

    I like golf. I created gilf.

    从输出中可以看到,此方法搜索介于az之间a任何字符(按字母顺序)。 这不包括数字或符号介于glf之间的字符串,这些字符串或符号不是真正的单词,并且可能不属于所需搜索条件。

    括号内的破折号

    您还可以通过在括号内包括其他字符集来搜索多个字符序列。 例如,要搜索azAZ ,请使用以下搜索:

    grep g[a-zA-Z]lf

    插入符号

    随着字符序列列表的增加,您可能会发现避免某些字符而不是指定要查找的字符会更容易搜索。 您可以通过在搜索序列之前(在方括号内)使用尖号(^)来完成此操作。 那是一个相当大的数目,但是通过遵循一个示例应该很容易理解。 更改搜索以避免使用数字,但使用此grep命令可以包括所有其他字符:

    grep g[^0-9]lf

    此搜索类似于先前的搜索,该搜索找到了所有字母字符,但是该搜索还返回了不在字母中且不在数字序列中的字符,例如数字符号( # )和美元符号( $ )。您排除了。

    星号

    下一个要试验的特殊字符是星号(*),它是几个重复运算符之一。 大多数人都熟悉使用命令行上的星号作为文件名(通配符)的搜索条件,但是在正则表达式中使用星号却大不相同。 星号表示搜索项(前一个字符或方括号表达式)可以出现零次,一次或多次。 要尝试此操作,请将以下几行添加到您一直在使用的grep.txt文件中:

    This time the o is missing in glf. Some people might say goolf. But they would not say goilf.

    现在,整个文件应如下所示:

    I like golf. Golf is played on grass. I created gilf. What is g2lf? This time the o is missing in glf. Some people might say goolf. But they would not say goilf.

    尝试在golfo后使用星号:

    grep go*lf grep.txt

    您的搜索返回包含单词golfglfgoolf

    I like golf. This time the o is missing in glf. Some people might say goolf.

    问号

    另一个重复运算符是问号(?)。 问号的功能类似于星号,除了搜索项可以出现零或一次。 多次出现将不匹配。 尝试使用问号而不是星号来执行刚刚执行的搜索:

    grep go?lf grep.txt

    如您所见,这次将golfglf作为匹配结果返回,但是goolf并不是因为在问号之前有多个搜索项o实例:

    I like golf. This time the o is missing in glf.

    加号

    通用重复运算符的最后一个是加号(+)。 当搜索项出现一次或多次时,将找到一个加号。 与星号不同,必须找到至少一个匹配项。 请尝试以下示例:

    grep go+lf grep.txt

    这次,搜索返回golfgoolf ,但没有返回glf因为未找到o

    I like golf. Some people might say goolf.

    行首和行尾锚

    在继续使用sed之前要了解的最后一个特殊字符是:行首锚(使用插入符号实现)和行尾锚(使用美元符号实现)。 您可能还记得在本教程前面使用插入号来否定方括号表达式。 在支架之外使用插入号时,它会执行完全不同的功能。 将插入号放在正则表达式的开头可指示搜索仅在行的开头进行。 换句话说,正则表达式中的第一个字符(在插入号之后)必须与新行中的第一个字符匹配,搜索才能匹配该行。 同样,在正则表达式的末尾放置一个美元符号,以表示您只想返回与行尾匹配的结果。 换句话说,您的正则表达式中的最后一个字符(在美元符号之前)必须与行中的最后一个字符匹配,搜索才能与该行匹配。 要对此进行测试,请将以下两行添加到grep.txt中:

    golf has been a fine example let's talk about something besides golf

    请注意,你不应该大写或圈点golf此测试,因为这将表明一个相同的单词在一行或使用锚线的开始结束操作不同的搜索。 要测试行首锚,请键入以下内容:

    grep ^golf grep.txt

    输出看起来像这样:

    golf has been a fine example

    要测试行尾锚,请使用相同的搜索,但要删除插入符号并在golf之后添加一个美元符号。

    grep golf$ grep.txt

    使用行尾锚点的输出如下所示:

    let's talk about something besides golf

    回顾

    现在,您已经通过在命令行上使用grep学习了正则表达式的基础。 接下来,您将学习使用sed ,它不仅搜索文本,还将替换它。 首先,这是到目前为止所学知识的回顾:

    . A period represents any single character [] Brackets enclose character sequences - A dash is used between characters to create a sequence (inside []) ^ A carrot is used to negate a sequence (inside []) * An asterisk searches for zero, one, or many instances of a search item ? A question mark searches for zero or one instance of a search item + A plus sign searches for one or many instances of a search item $ A dollar sign searches the end of a line ^ A carrot searches the beginning of a line \ A backslash preceding a special character makes it a plain character (See the next section.)

    使用sed编辑文件

    sed是流编辑器的缩写。 文本编辑器的传统的现代定义是一个交互式应用程序,可用于创建和编辑文本文件。 sed还是文本编辑器,但它是命令行实用程序,而不是交互式实用程序,这使其成为批处理编辑的极其强大的工具。 sed通常在UNIX shell脚本中用于过滤大量文本文件。 在本教程的第一部分中,您使用了一个讨论高尔夫的小测试文件。 为了演示sed编辑器的高级功能,您将使用一小段开发人员可能希望在批处理过程中更改的代码段。

    复制此文本并将其粘贴到名为sed.txt的文件中:

    system "echo 'project:$project' &gt;&gt; logfile"; system "echo 'version:$version' &gt;&gt; logfile"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'nodes:$nodes' &gt;&gt; logfile"; system "echo 'threads:$threads' &gt;&gt; logfile";

    正斜杠

    前面解释过的所有与grep一起使用的特殊字符也可以在sed 要使用sed ,您必须学习一些其他语法。 sed的基本表达式由四部分组成,并用正斜杠(/)分隔。 这是基本sed命令的常见语法:

    sed s/REGULAREXPRESSION/REPLACEMENTSTRING/flags INPUT_FILE

    s-搜索和替换

    s表示您要执行搜索并替换 。 正斜杠用于绑定sed正则表达式。 例如,如果您只想将logfile替换为logfile.txt ,则可以运行以下命令:

    sed s/logfile/logfile.txt/ sed.txt

    输出看起来像这样:

    system "echo 'project:$project' &gt;&gt; logfile.txt"; system "echo 'version:$version' &gt;&gt; logfile.txt"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile.txt"; system "echo 'nodes:$nodes' &gt;&gt; logfile.txt"; system "echo 'threads:$threads' &gt;&gt; logfile.txt";

    在这种情况下要注意的重要一点是sed实际上不会更改sed.txt的内容。 而是将输出发送到标准输出。 对于这些示例,您将输出发送到标准输出,以便您可以立即查看操作结果。

    为了将来参考,可以捕获输出或将其发送到新文件中。 例如,要将输出发送到sed_new.txt,请运行以下命令:

    sed s/logfile/logfile.txt/ sed.txt &gt; sed_new.txt

    反斜杠

    在学习斜杠时,还有另一个非常重要的特殊字符要学习。 反斜杠(\)称为转义字符,因为它从正则表达式解释中转义下一个字符。 更简单地讲,在特殊字符前加反斜杠可使该字符成为普通项目而不是命令项目。 这很重要,因为许多文件(尤其是在编写代码时)大量使用了用于执行正则表达式的相同字符。 在sed.txt文件中,您会注意到使用了美元符号。 如果要替换$project而不是project ,则需要在搜索中使用转义符并替换:

    sed s/\$project/\$project_name/ sed.txt

    您可以在输出中看到$project已更改,但project并未更改。

    system "echo 'project:$project_name' &gt;&gt; logfile"; system "echo 'version:$version' &gt;&gt; logfile"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'nodes:$nodes' &gt;&gt; logfile"; system "echo 'threads:$threads' &gt;&gt; logfile";

    更改一个项目的多个实例

    这带来了sed另一个重要功能。 如果要更改project两个实例怎么办? 从到目前为止所学的知识来看,合理的答案是仅将project用作正则表达式,但这并不完全正确。 继续尝试一下,以便我可以说明和解释该过程:

    sed s/project/project_name/ sed.txt

    您可以在输出中看到project的第一个实例已更改为project_name

    system "echo 'project_name:$project' &gt;&gt; logfile"; system "echo 'version:$version' &gt;&gt; logfile"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'nodes:$nodes' &gt;&gt; logfile"; system "echo 'threads:$threads' &gt;&gt; logfile";

    但是,第二个实例不是,即使它确实与您的正则表达式匹配。 从第一个示例知道, sed似乎更改了输入中的每个匹配字符串,而不仅仅是第一个匹配项,因为sed更改了logfile每个实例。

    区别在于, logfile每个实例都位于单独的行中,而同一行中有两个project实例。 为什么这会有所作为? sed被实现为行编辑器。 每个单独的行一次放入一个内存,然后作为一个单元进行操作。 在运行sed ,请记住这一点,因为所有命令行选项均受此设计原则限制(这使sed大多数实现都没有与系统内存有关的文件大小限制)。 默认情况下,每行被视为sed命令的新执行。 即使在第一个示例中没有出现这种方式,每个sed命令也仅替换匹配字符串的第一个实例。 但是,您可以简单地使用g标志进行更改。

    g标志

    执行相同的sed命令,但是这次最后加上g

    sed s/project/project_name/g sed.txt

    这次, project两个实例在第一行都更改为project_name

    system "echo 'project_name:$project_name' &gt;&gt; logfile"; system "echo 'version:$version' &gt;&gt; logfile"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'nodes:$nodes' &gt;&gt; logfile"; system "echo 'threads:$threads' &gt;&gt; logfile";

    您可能还记得g是global的缩写。

    运行初步搜索

    sed另一个强大功能是在搜索和替换操作之前运行初步搜索,以查看您是否在要执行命令的行上。 这几乎就像在sed内部执行grep 在您的示例中,您可能想要更改node变量的日志文件,而不是将其与所有其他输出分组。 为此,您想将字符串logfile更改为logfile_nodes ,但仅在与节点有关的行上。 这个命令就是这样做的:

    sed /nodes/s/logfile/logfile_nodes/ sed.txt

    这是输出:

    system "echo 'project:$project' &gt;&gt; logfile"; system "echo 'version:$version' &gt;&gt; logfile"; system "echo 'optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'nodes:$nodes' &gt;&gt; logfile_nodes"; system "echo 'threads:$threads' &gt;&gt; logfile";

    更改每个以冒号结尾的字符串

    现在,尝试在使用grep同时使用sed命令中学习到的一些关于正则表达式的知识。 您可以使用sed内部的以下正则表达式来更改每个以冒号结尾的字符串:

    sed s/[a-z]*:/value:/g sed.txt

    输出看起来像这样:

    system "echo 'value:$project' &gt;&gt; logfile"; system "echo 'value:$version' &gt;&gt; logfile"; system "echo 'value:$optionalid' &gt;&gt; logfile"; system "echo 'value:$nodes' &gt;&gt; logfile"; system "echo 'value:$threads' &gt;&gt; logfile";

    这很酷,但不是很合逻辑。 它不是很合逻辑的原因是因为您在所有变量之前都具有单词value ,而无法知道哪个变量是哪个。 但是,您可以使用sed另一个功能将其变成一个真实的示例。

    &符

    “与”号(&)表示正则表达式匹配的字符串。 换句话说,如果[az]*:证明是project:在特定的行上,“&”号将保留该值。 这可能非常有用。 看一下这个例子:

    sed s/[a-z]*:/new_\&amp;/g sed.txt

    这次,您更改了每个匹配的字符串,但是保留了与每个变量关联的标识符:

    system "echo 'new_project:$project' &gt;&gt; logfile"; system "echo 'new_version:$version' &gt;&gt; logfile"; system "echo 'new_optionalid:$optionalid' &gt;&gt; logfile"; system "echo 'new_nodes:$nodes' &gt;&gt; logfile"; system "echo 'new_threads:$threads' &gt;&gt; logfile";

    执行多个命令序列

    您还可以使用sed一次执行多项操作。 要一次执行多个命令序列,必须在每个表达式之前使用-e标志。 缺省情况下, sed将第一个参数解释为一个表达式,但是在运行多个命令时需要更加明确,因此需要-e标志。 例如:

    sed -e s/[a-z]*:/value:/g -e s/logfile/name/g sed.txt

    您可以看到在这种情况下sed在适当的位置插入了value:name

    system "echo 'value:$project' &gt;&gt; name"; system "echo 'value:$version' &gt;&gt; name"; system "echo 'value:$optionalid' &gt;&gt; name"; system "echo 'value:$nodes' &gt;&gt; name"; system "echo 'value:$threads' &gt;&gt; name";

    正如您开始看到的那样, sed可以是一个非常强大的工具,可以在大规模批处理过程中编辑文件。 在前面的示例中,您正在处理单个文件,就像使用grep 不要忘记这些实用程序的部分功能是跨多个文件运行它们,您可以使用通配符或文件列表来代替在本教程中一直使用的单个文件。

    在命令行上使用awk

    本教程首先介绍了正则表达式,然后介绍了grepsed grep是功能强大的搜索实用程序,而sed是功能更强大的搜索和替换实用程序。 awk下一步,使用成熟的命令行编程语言中的正则表达式。 就像sed一样,当在命令行上使用awk时,它将接受基于行的输入。 awk解释一行输入,但与sed不同,它将行中的每一条输入作为变量处理,这些变量可用作内联代码的输入和输出。

    应当注意,AWK(大写)是一种成熟的编程语言,可用于编写脚本(而不是仅在命令行上使用),但是本教程重点介绍awk ,这是命令行实用程序即时解释AWK命令。

    顺便说一句,如果有人正在阅读本文并试图考虑您所学到的一切的实际用途,那么我只是使用grep在一些旧代码中搜索了很好的awk示例:

    grep awk */*.pl

    大多数系统管理员或程序员每天都会发现这些工具的用途。 这是我的输出的几行:

    Edaemon/m_checkcurrentdisk.pl:$freespace = `awk '(NR==1) {print \$4 / 1024 / 1024}' grep.tmp`; Edaemon/m_getdatetime.pl:$month = `awk '(NR==1) {print \$2}' datetime.txt`; Odaemon/odaemon.beowulf.dvd.pl:$filesize = `awk '(NR==1) {print \$1}' temp.txt`;

    这些都是很好的示例,因为它们显示了awk基本用法。 首次尝试时,请使其更加简单。 对于使用awk进行的测试,请在空目录中创建以下文件(每个文件的内容无关,它们可以为空):

    Screenshot_1.jpg Screenshot_2.jpg Screenshot_3.jpg awk.txt regular.txt sed.txt

    使用ls的输出作为awk的输入

    默认情况下, awk读取输入文件中的每一行,并将内容分成由空格确定的变量。 在一个非常简单的示例中,您可以将ls的输出用作awk输入并打印结果。 本示例使用带有管道字符(|)的ls将输出发送到awk

    ls | awk ' { print $1 } '

    随后, awk在每一行上打印第一项,在这种情况下,这是每一行上的唯一项:

    Screenshot_1.jpg Screenshot_2.jpg Screenshot_3.jpg awk.txt regular.txt sed.txt

    使用ls -l生成awk的多列输入

    那真的很基本。 在下一个示例中,使用ls -lawk生成多列输入:

    ls -l

    ls实现因系统而异,但这是一些示例输出:

    total 432 -rw-rw-rw- 1 guest guest 169074 Oct 15 14:51 Screenshot_1.jpg -rw-rw-rw- 1 guest guest 23956 Oct 15 20:56 Screenshot_2.jpg -rw-rw-rw- 1 guest guest 12066 Oct 15 20:57 Screenshot_3.jpg -rw-r--r-- 1 tuser tuser 227 Oct 15 20:16 awk.txt -rw-r--r-- 1 tuser tuser 233 Oct 15 19:35 regular.txt -rw-r--r-- 1 tuser tuser 227 Oct 15 23:16 sed.txt

    请注意,文件所有者是每一行的第三项,文件名是每一行的第九项(默认情况下,项目用awk的空格分隔)。 您可以使用awk通过在每行上打印第三和第九个变量来从此列表中拉出文件所有者和文件名。 这是如何做:

    ls -l | awk ' { print $3 " " $9 } '

    您会注意到awkprint命令有两个引号和一个空格。 这只是在输出中的文件所有者和文件名之间打印一个空格:

    guest Screenshot_1.jpg guest Screenshot_2.jpg guest Screenshot_3.jpg tuser awk.txt tuser regular.txt tuser sed.txt

    您可以在awk打印语句中的变量之间用引号引起来的文本。

    使用正则表达式指定行

    现在,您已经了解了如何使用awk的基础知识,但是本教程不是关于正则表达式的吗? awk ,正则表达式被大量使用。 最常见的示例是在awk命令之前加一个正则表达式,该正则表达式指定要操作的行。 sedawk中的正则表达式封装在正斜杠中。 例如,如果您只想对tuser拥有的文件进行操作,则可以使用以下命令:

    ls -l | awk ' /tuser/ { print $3 " " $9 } '

    该命令产生以下输出:

    tuser awk.txt tuser regular.txt tuser sed.txt

    更改文件扩展名

    在另一个示例中,您可能想要更改每个文本文件的文件扩展名而不触摸图像文件。 为此,您需要使用句点而不是空格来分隔输入变量,然后使用正则表达式表示您只想搜索文本文件。 要基于句点拆分变量,请使用-F标志,后跟要在引号中使用的字符。 尝试以下示例,将awk输出通过管道传递到外壳程序(它将执行awk生成的命令):

    s | awk -F"." ' /txt/ { print "mv " $1 "." $2 " " $1 ".doc" } ' | bash

    随后的ls -l将显示新文件名:

    -rw-rw-rw- 1 guest guest 169074 Oct 15 14:51 Screenshot_1.jpg -rw-rw-rw- 1 guest guest 23956 Oct 15 20:56 Screenshot_2.jpg -rw-rw-rw- 1 guest guest 12066 Oct 15 20:57 Screenshot_3.jpg -rw-r--r-- 1 tuser tuser 227 Oct 15 20:16 awk.doc -rw-r--r-- 1 tuser tuser 233 Oct 15 19:35 regular.doc -rw-r--r-- 1 tuser tuser 227 Oct 15 23:16 sed.doc

    记住,这些是开始使用awk的基础知识,但是AWK是一种成熟的编程语言,其功能远远超过本教程中介绍的内容。 看一下awk man页。 如果您想学习更多,明智的做法是购买一本好书。

    Wrapping up

    本教程中的示例应该足以使您基本了解使用正则表达式的UNIX过滤器以及如何在命令行上使用它们。 使用的三个实用程序grepsedawk具有许多内置选项和功能,这些功能远远超出了本教程中讨论的开始课程。 有些书专门讨论sedawk grepman页中搜索以了解有关其功能的更多信息。

    如果您觉得自己已经掌握了正则表达式的基础知识并想迈出下一步,那么Perl是另一种很棒的语言,它可以充分利用正则表达式。 Perl的高手喜欢那些简明而又高效的代码行,对于陌生的用户来说,这似乎是毫无意义的字符串。

    如果您已按照本系列中的每个教程进行了学习,那么现在您已经了解了命令行上的基本文件操作,如何使用vi文本编辑器以及如何使用命令行过滤器。

    请密切注意本系列的下一篇教程,该教程将介绍Shell技巧和窍门。 同时,在本教程中,您将学习有关正则表达式和实用程序的所有知识。 它们使您可以将漫长而复杂的任务变成您引以为傲的快速,优雅的解决方案!


    翻译自: https://www.ibm.com/developerworks/aix/tutorials/au-unixtips3/index.html

    展开全文
  • 5.雅各布定律:用户将大部分时间别人家网站(产品)上,而不是你。这意味着他们希望你网站(产品)跟别人有相同操作方法和使用模式。 6.简洁法则:用户会对获取到信息进行过滤

    1.美即好用效应:美观的界面可以使用户容忍一些轻微的操作上的不便利。

    2.多尔蒂门槛:响应时间在400ms以内较为合适,过快或过慢都会降低用户体验。

    3.菲兹定律:任意一点移动到目标中心位置所需要的时间,与目标距离正相关,与目标大小负相关。

    让设计更有说服力的20条经典原则:菲茨定律

    4.席克定律:决策所需要花费的时间随着选择的数量和复杂性增加而增加。

    5.雅各布定律:用户将大部分时间花在别人家的网站(产品)上,而不是你的。这意味着他们希望你的网站(产品)跟别人的有相同的操作方法和使用模式。

    6.简洁法则:用户会对获取到的信息进行过滤和简化

    7.邻近性、相似性、连通性(格式塔法则)

    8.同域原则:如果元素处在一个具有明确边界的区域内,那么在用户的感知中,这些元素倾向于成组。

    9.米勒定律:在短时记忆中,人平均只能记忆 7(±2)个项目。即人们最多只能够记住 7(±2)个项目组成的一组。

    10.奥卡姆剃刀原理:如无必要,勿增实体。

    11.波斯塔尔法则:接受多变,输出保守。

    12.系列位置效应:用户更容易记住系列中出现的第一项(首因效应)和最后一项(近因效应)。

    13.冯·雷斯托夫效应:当存在多个相似的物体时,与众不同的那个更容易被记住。

    14.蔡格尼克记忆效应:人们对未完成任务的记忆比已完成的更深刻。

    15.帕累托效应:对于许多事件,大约 80% 的影响来自 20% 的原因。(关注对用户来说更重要的部分,奥卡姆剃刀理论的另一种解释)

    16.帕金森定律:任何任务都会拖延,直到所有可用时间都用完为止。(帮助用户更好的划分任务来提高使用效率)

    17.特斯勒定律(复杂性守恒定律):任何系统都存在固有的复杂性,无法减少;唯一的问题是谁来处理它。(复杂程度是固定的,但不能让用户解决,设计者要尽可能简化用户的操作)

    参考网站:https://www.uisdc.com/zt/ux-rules

    展开全文
  • 短信过滤

    2008-07-13 17:23:38
    情形三、在过滤号码等输入框按确认键即可键入分号。 ====================================================================== 【特别说明】 1、如果您第一次安装短信过滤器后没有重新启动您...
  • Vue学习之过滤器 ...引入库2....Vue的过滤器能让通过其中的数据发生一定的变化,...全局注册写全局定义域,用Vue.fliter()注册,需要两个参数,第一个过滤器的名字,第二个是一个函数,返回过滤的结果 Vue.filter('pars
  • 字典过滤

    2016-03-30 14:56:00
    开发,大部分时间都是维护或者二次开发,好封装自己用起来舒服自在,但是通读性不一定高 一个频繁改需求项目,如何根据业务需求该封装地方封装,不该封装地方不要封装,该公用地方公用,不该公用...
  • 引言 介绍布隆过滤器之前我们首先引入几个场景。 场景一 ...大部分情况我们都是这样做,当访问一个不存在key时候,设置一个带有过期时间的标志,然后放入缓存。不过这样做缺点也很明
  • ionic1 过滤器代码

    2017-11-08 17:47:59
    angularJS 中的过滤器真很强大。有时间可以好好静下来研究它功能。 直接说思路 先写好html界面,代码有贴出部分,这些有点基础都写出来。 这个功能核心在于双向数据绑定。 通过 ng-model="searchCont....
  • 本文提出了一种称为“柠檬袋”方法,它使人群能够以至少与传统(李克特量表)评级方法相媲美准确度过滤想法,但只需要一小部分时间。 这种方法背后关键见解是,群体消除坏主意方面比识别好主意方面要好得...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,014
精华内容 405
关键字:

在过滤的大部分时间中