精华内容
下载资源
问答
  • Backgroud grep、sed和awk俗称Linux三剑客 grep常用于字符串搜索功能 ...有一个文件 logicaltool.sh,我们要替换其中的一行,如下 server_num= ps -ef | grep logical_tool | wc -l 整行替换为 server_num= ps -e

    Backgroud

    grepsedawk俗称Linux三剑客
    grep常用于字符串搜索功能
    sed常用于以行为单位对文本进行处理
    awk是更为细粒度的处理,可以指定分隔符将一行(一条记录)划分为多个字段,然后以字段为单位处理文本,几乎可以实现grepsed所能实现的所有功能

    实例

    • 有一个文件 logicaltool.sh,我们要替换其中的一行,如下
    server_num= ps -ef | grep logical_tool | wc -l
    
    • 整行替换为
    server_num= ps -ef | grep logical_tool | grep -v grep | grep -v logicaltool.sh | grep -v vi | grep -v tail | wc -l
    
    • 替换脚本 replace.sh
    replacement="server_num= ps -ef | grep logical_tool | grep -v grep | grep -v logicaltool.sh | grep -v vi | grep -v tail | wc -l"
    sed -i "/^server_num=*/c$replacement" /home/logicaltool.sh
    

    实测没有问题

    展开全文
  • 1.以“aaa”开始的行 ^aaa.*$ 2.以“aaa”结尾的行 .*aaa$

    1.以“aaa”开始的行

    ^aaa.*$

    2.以“aaa”结尾的行

    .*aaa$

    展开全文
  • sed整行替换

    千次阅读 2019-12-10 11:57:07
    Sed替换 匹配行首为1,并替换整行为4 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新...

    Sed替换
    匹配行首为1,并替换整行为4
    在这里插入图片描述

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G
    查找:Ctrl/Command + F
    替换:Ctrl/Command + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • Linux学习之文本查找编辑替换命令

    千次阅读 2019-01-06 22:34:37
    本文主要包括Linux环境下最常使用的文本查找编辑替换等命令,包括: find grep awk sed find Linux系统下用于文本查找定位的命令行。 命令语法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|...

    本文主要包括Linux环境下最常使用的文本查找编辑替换等命令,包括:

    • find
    • grep
    • awk
    • sed

    find

    Linux系统下用于文本查找定位的命令行。
    命令语法:
    find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

    find与xargs
    在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
    find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
    在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
    而使用xargs命令则只有一个进程。在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

    # 用.来表示当前目录,用/来表示系统根目录
    # -name指定根据关键字查找文件或者目录,-exec command {} \;将查到的文件执行command操作,{} 和 \;之间有空格;-ok 和-exec相同,只不过在操作前要询用户
    # 递归查找/打印当前目录下面的所有文件名是'.svn'的目录
    find . -name .svn -exec ls '{}' \;
    # 递归删除当前目录下面的所有文件名是'.svn'的目录
    find . -name .svn -exec rm -rf '{}' \;
    # 递归删除当前目录下面的所有文件名是'.classpath'的目录
    find . -name .classpath -exec rm -rf '{}' \;
    find . -name ".classpath" -exec rm -fr '{}' +
    # 另外如果要删除的文件名里面还有[]的话,命令执行失败,加入转义字符即可
    find . -name "name\[with\]bracket" -exec rm -fr '{}' +
    # 查找冲突的类/方法,即找出所有的jar包,再解压出其文件列表,再搜索冲突的类名
    find . -name '*.jar' -exec jar -tvf {} \; | grep EE   
    # 在当前目录递归查找列出所用大于 1000 MB 的文件,-type指定查找普通文件(f)或者目录(d),b – 块设备文件,c – 字符设备文件,p – 管道文件,l – 符号链接文件;-size n:[c] 查找文件长度为n块(一块等于512字节)的文件,带有c时表示文件长度以字节计
    # 在当前目录下查找文件长度大于1 M字节的文件
    find . -size +1000000c –print
    # 在当前目录下查找长度超过10块的文件
    find . -size +10 –print
    # 对查找结果排序:正序,从小到大 sort -r表示反序;第一个管道符号后命令:显示查询结果的详细信息(文件大小)
    find . -type f -size +1M -print0 |xargs -0 du -h|sort -n
    find . -type f -size +800M  -print0 | xargs -0 ls -l
    find . -type f -size +800M  -print0 | xargs -0 ls -lh
    # 列出所有CSS或HTML文件
    find . -type f \( -name "*.css" -or -name "*.html" \)
    # -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
    find / -name “CON.FILE” -depth –print
    # -mtime -n +n,按照文件更改时间来查找文件,– n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前
    # -newer file1 ! file2,查找更改时间比文件file1新但比文件file2旧的文件
    # -perm,按照文件权限来查找文件
    # -user,按照文件属主来查找文件;-nouser,查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在
    # -group,按照文件所属的组来查找文件;-nogroup,查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在
    # -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件
    # -prune,不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略
    # 在/apps目录下查找文件,但排除/apps/bin目录
    find /apps -path “/apps/bin” -prune -o –print
    # -mount:在查找文件时不跨越文件系统mount点
    # 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统)
    find . -name “*.XC” -mount –print
    # find结合xargs,在当前目录及其子目录下查找包含abcd字符串的文件行,经常用于搜索代码。
    find . -type f | xargs grep 'abcd'
    
    find ./ -size 0 -exec rm {} ; 删除文件大小为零的文件 (还可以以这样做:rm -i find ./ -size 0  或 find ./ -size 0 | xargs rm -f &)
    为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l {  } ;
    在/logs目录中查找更改时间在5日以前的文件并删除它们:find /logs -type f -mtime +5 -exec rm {  } ;
    -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    find . -name “*.conf”  -mtime +5 -ok rm {  } ; 在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示 
    
    find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
    find / -name “core” -print | xargs echo “” >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
    find . -type f -print | xargs grep “hostname” 用grep命令在所有的普通文件中搜索hostname这个词
    find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} ;)
    find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
    find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
    

    grep

    grep,global search regular expression and print out the line,全面搜索正则表达式并把行打印出来,一个超级强大的文本搜索工具,使用正则表达式搜索内容(文件或输入流),并把匹配的行打印出来。

    In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions ?, +, {,|, ,and. Traditional egrep did not support the { meta-character, and some egrep implementations support { instead, so portable scripts should avoid { in grep -E patterns and should use [{] to match a literal {. GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification. For example, the command grep -E ‘{1′ searches for the two-character string {1 instead of reporting a syntax error in the regular expression. POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.

    命令行语法:
    grep [OPTION]… PATTERN [FILE]…
    grep命令用于搜索由Pattern参数指定的模式,并将每个匹配的行写入标准输出中。这些模式是具有限定的正则表达式,它们使用ed或egrep命令样式。如果在File参数中指定了多个名称,grep命令将显示包含匹配行的文件的名称。对 shell 有特殊含义的字符 ($, *, [, |, ^, (, ), ) 出现在 Pattern参数中时必须带双引号。
    如果 Pattern参数不是简单字符串,通常必须用单引号将整个模式括起来。在诸如 [a-z], 之类的表达式中,-(减号)cml 可根据当前正在整理的序列来指定一个范围。整理序列可以定义等价的类以供在字符范围中使用。如果未指定任何文件,grep会假定为标准输入。

    操作符含义实例
    .匹配任何单个非换行符字符
    ?匹配前一个字符0次或者1次
    *匹配前一个字符>=0次,.*一起用代表任意字符。
    +匹配前一个字符>=1次
    {N}匹配前一个字符N次
    {N,}匹配前一个字符>=N次
    x{N,M}匹配字符x N~M次
    []匹配一个指定范围内的字符如’[Gg]rep’匹配Grep和grep
    [^]匹配一个不在指定范围内的字符如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行
    (…)标记匹配字符如:’(love)’,love被标记为1
    -表示范围
    ^开始标记,表示在开始位置匹配一个空字符串,也表示不在列表的范围内字符
    $结束标记,匹配一个空的字符串
    b单词锁定符,在一个单词的边缘位置匹配空字符串如‘bgrepb’只匹配grep,两边均为空格。
    B在一个单词的非边缘位置匹配空字符串
    <匹配单词开始的空字符串
    >匹配单词结尾的字符串
    w匹配一个文字或数字字符,也就是[A-Za-z0-9]如’Gw*p’匹配以G后跟零个或多个文字或数字字符,然后是p
    Ww的反置形式,匹配一个非单词字符,如点号句号等,W*则可匹配多个

    常用选项

    选项缩写选项完整意义示例
    -?-同时显示匹配行上下的?行grep -2 pattern filename同时显示匹配行的上下2行。
    -b–byte-offset打印匹配行前面打印该行所在的块号码。
    -c–count只打印匹配的行数,不显示匹配的内容。
    -f File–file=File从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
    -h–no-filename当搜索多个文件时,不显示匹配文件名前缀。
    -i–ignore-case忽略大小写差别。
    -q–quiet取消显示,只返回退出状态。0则表示找到了匹配的行。
    -l–files-with-matches打印匹配模板的文件清单
    -L–files-without-match打印不匹配模板的文件清单
    -n–line-number在匹配的行前面打印行号
    -s–silent不显示关于不存在或者无法读取文件的错误信息
    -v–revert-match反检索,只显示不匹配的行
    -w–word-regexp如果被引用,就把表达式做为一个单词搜索
    -V–version显示软件版本信息

    命令行实例

    # 在当前目录下查找"xml"字符串,* : 表示当前目录所有文件,-r 是递归查找,-n 是显示行号,-R递归,-i 忽略大小写,否则大小写敏感,-l只列出匹配的文件名, -L列出不匹配的文件名, -w只匹配整个单词而不是字符串的一部分,
    grep -rn "xml" *
    # 匹配的上下文分别显示[number]行
    grep -C number pattern files
    # 匹配 pattern1 或 pattern2
    grep pattern1 | pattern2 files
    # 既匹配 pattern1 又匹配 pattern2
    grep pattern1 files | grep pattern2
    # 列举含有xml关键字的文件
    grep xml -rl *
    # 列举出含有xml关键字的行
    grep google -r *
    # 查找文件满足指定日期的日志,重定向到另一个文件
    # grep "(date +"%Y-%m-%d")" error.log > today-error.log
    
    
    # 搜索vivek,即不区分大小
    grep -i -w vivek /etc/passwd
    # 使用了扩展正则表达式的模式:不区分大小写地检索 ‘vivek’ 和 ‘raj’
    grep -E -i -w 'vivek|raj' /etc/passwd
    # 使用 ^ 和 $ 符号强制一个正则表达式分别匹配一行的开始或结束的位置
    grep ^vivek /etc/passwd
    # 显示以 vivek 单词开头的文本行
    grep -w ^vivek /etc/passwd
    # 检索以 ‘foo’ 结尾的文本格式
    grep 'foo$' FILENAME
    # 搜索空白行
    grep '^$' FILENAME
    
    # 在grep中使用 OR 的逻辑运算
    grep -E 'word1|word2' FILENAME
    egrep 'word1|word2' FILENAME
    grep 'word1\|word2' FILENAME
    # 在grep中使用 AND 的逻辑运算,显示所有包含单词 ‘word1′ 和 ‘word2′ 的结果
    grep 'word1' FILENAME | grep 'word2'
    grep 'foo.*bar\|word3.*word4' FILENAME
    
    1、如何检索一个具有以 ‘-‘ 开头的的模式?
    使用 -e 选项搜索所有匹配 ‘–test–‘ 的结果。grep 会尝试把 ‘–test–‘ 作为一个选项解析:grep -e '--test--' FILENAME
    
    4、如何测试序列?
    你可以使用下面的语法测试一个字符在序列中的重复的次数:
    {N}
    {N,}
    {min,max}
    匹配包含两个字母 v 的字符串结果:egrep "v{2}" FILENAME
    下面的例子中将检索文件内包含 “col” 和 “cool” 的字符串结果:egrep 'co{1,2}l' FILENAME
    下面的例子中将匹配至少含有3个字母 c 的结果:egrep 'c{3,}' FILENAME
    下面的示例将匹配 “91-1234567890″ 格式的手机号码:grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" FILENAME
    5、如何使 grep 的输出结果高亮标注?
    使用下面例子的语法:
    grep --color regex FILENAME
    6、如何使 grep 的输出只显示匹配的部分而不是整行?
    使用下面例子的语法:grep -o regex FILENAME
    
    用 “.” 来代替单个字符,查询所有以 “b” 开头、 “t” 结尾的三个字符的单词
    grep '\<b.t\>' FILENAME
    \< 在单词的开始位置匹配空格字符串
    \> 在单词的结尾匹配空格字符串
    检索并输出所有两个字母的结果:grep '^..$' FILENAME
    检索并显示所有以 ‘.’ 和数字开头的结果:grep '^\.[0-9]' FILENAME
    转义字符’.’
    下面的正则表达式查找 IP 地址 192.168.1.254 将不能获得预期的结果:grep '192.168.1.254' /etc/hosts
    其中三个点都需要被转义:grep '192\.168\.1\.254' /etc/hosts
    以下示例将只匹配一个地址:
    egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]
    {1,3}' FILENAME
    以下将不分大小写地匹配单词 Linux 或 Unix :egrep -i '^(linux|unix)' FILENAME
    
    
    # 匹配 ‘Vivek’ 或 ‘vivek’
    grep '[vV]ivek' FILENAME
    # 匹配 vivek1 或 Vivek2
    grep -w '[vV]ivek[0-9]' FILENAME
    # 匹配foo11 or foo12
    grep 'foo[0-9][0-9]' FILENAME
    # 匹配字母
    grep '[A-Za-z]' FILENAME
    # 匹配所有包含“w” 或 “n” 字母的文本行
    grep [wn] FILENAME
    
    # 在括号内的表达式中,在“ [: ”和“ :] ”中所附的字符类的名称:代表属于该类的所有字符的列表。标准字符类名称:
    [:alnum:] – 字母数字字符。
    [:alpha:] – 字母顺序
    [:blank:] – 空格和制表符。
    [:digit:] – 数字: ‘0 1 2 3 4 5 6 7 8 9’。
    [:lower:] – 小写字母:‘a b c d e f ‘。
    [:space:] – 特殊字符:制表符,换行符,垂直制表符、换页,回车,和空间。
    [:upper:] – 大写字母:‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’。
    # 匹配所有大写字母
    grep '[:upper:]' FILENAME
    
    ls -l | grep ‘^a’ 通过管道过滤ls -l输出的内容,只显示以a开头的行。
    grep ‘test’ d* 显示所有以d开头的文件中包含test的行。
    grep ‘test’ aa bb cc 显示在aa,bb,cc文件中匹配test的行。
    grep ‘[a-z]’ aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
    grep ‘w(es)t.*’ aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用””号进行转义,直接写成’w(es)t.*’就可以了。
    grep -i pattern files :不区分大小写地搜索。默认情况区分大小写
    grep -l pattern files :只列出匹配的文件名,
    grep -L pattern files :列出不匹配的文件名,
    grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
    grep -C number pattern files :匹配的上下文分别显示[number]行,
    grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
    grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
    
    1.搜索和寻找文件
    $ sudo dpkg -l | grep -i python
    运行dpkg -l列出你系统上安装的.deb包。使用管道将输出结果传输给命令grep -i python,这一步可以简单解释为把结果传输给grep然后过滤出所有含有python的项,并返回结果。–i选项用于忽略大小写,因为 grep 是大小写敏感的。使用选项-i是个好习惯,除非你打算进行更细节的搜索。
    
    2.搜索和过滤文件
    grep还可以在一个或多个文件里用于搜索和过滤。移除demo.txt文件所有的注释行
    $ sudo grep -v "#" demo.txt
    选项-v是告诉grep命令反转它的输出结果,意思就是不输出匹配的项,做相反的事,打印出所有不匹配的项。假设有#的是注释行(实际上不尽然)。
    
    3.找出所有的mp3文件
    找出jayZ的所有mp3格式文件,也不要有任何混合音轨。使用find再结合管道使用grep:
    $ sudo find . -name ".mp3" | grep -i JayZ | grep -vi "remix""
    使用find命令打印出所有以.mp3为后缀名的文件,接着将其使用管道传递给grep -i过滤和打印出名字为“JayZ”的文件,再使用管道传送给grep -vi以便过滤掉含有“remix”的项。
    
    4.在搜索字符串前面或者后面显示行号
    -A和-B之间的切换,是用以显示匹配的行以及行号,分别控制在字符串前或字符串后显示的行数:-A=after、-B=before。
    $ sudo ifconfig | grep -A 4 etho $ sudo ifconfig | grep -B 2 UP
    5.在匹配字符串周围打印出行号
    grep命令的-C选项和例4中的很相似,不过打印的并不是在匹配字符串的前面或后面的行,而是打印出两个方向都匹配的行(译注:同上面的记忆窍门一样:-C=center,以此为中心): $ sudo ifconfig | grep -C 2 lo
    
    6.计算匹配项的数目
    将grep输出的结果用管道传送给计数器(wc程序),grep内建的选项可以达到同样的目的:$ sudo ifconfig | grep -c inet6
    
    7.按给定字符串搜索文件中匹配的行号
    n选项告诉你所搜索的内容在文件的哪一行,当你在编译出错时需要调试时:
    $ sudo grep -n "main" setup.py
    
    8.在所有目录里递归的搜索
    假若你要在当前文件夹里搜索一个字符串,-r选项用于递归的搜索: $ sudo grep -r “function” *
    
    9.进行精确匹配搜索
    -w选项给grep命令可以在字符串中进行精确匹配搜索(译注:包含要搜索的单词,而不是通配):$ sudo ifconfig | grep -w “RUNNING”
    将打印出含有引号内匹配项的行:$ sudo ifconfig | grep -w “RUN”
    
    搜索这个匹配项时,若搜索的东西里面没有这样的一个单独的单词,将什么也不会返回。
    
    10.在Gzip压缩文件中搜索
    grep的衍生命令行工具。第一个是zgrep,与zcat很相似,用于gzip压缩过的文件。与grep相似的命令选项:$ sudo zgrep -i error /var/log/syslog.2.gz
    
    11. egrep
    egrep,即 grep -E ,它把模式作为一个扩展的正则表达式解释。它可以识别更多的正则表达式元字符,例如at + ? | 和()。
    
    12.搜索一个固定匹配字符串
    fgrep用于在一个文件或文件列表中搜索固定样式的字符串。功能与grep -F同。fgrep的一个通常用法为传递一个含有样式的文件给它:
    $ sudo fgrep -f file_full_of_patterns.txt file_to_search.txt
    grep还可以写成cron任务或者自动的shell脚本去执行。
    

    sed

    sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
    sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

    比grep更强大,可以执行几乎所有的字符串相关的操作任务,包括添加、删除还有替换字符串的内容。

    # 查看文件的第100行到第200行
    sed -n '100,200p' log.txt
    # 替换字符串中的特定子串
    echo "int charset=gb2312 float"|sed "s/charset=gb2312/charset=UTF-8/g"
    # 替换test文件每行匹配ab的部分为cd
    sed -i 's/ab/cd/g' test
    

    awk

    awk,功能超级强大的数据处理引擎之一。相对于 grep 的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。awk 命令默认从 stdio 标准输入获取文件内容, awk 使用一对单引号来表示 一些可执行的脚本代码,在可执行脚本代码里面,使用一对花括号来表示一段可执行代码块,可以同时存在多个代码块。 awk 的每个花括号内同时又可以有多个指令,每一个指令用分号分隔,awk 其实就是一个脚本编程语言。
    awk和sed常用于文本处理,awk按列进行处理,sed按行进行处理。
    命令语法:
    awk [options] 'program' file
    options 表示可选参数项,program表示 awk 的可执行脚本代码,file 表示 awk 需要处理的文本文件。
    awk内置变量
    $0 这个表示文本处理时的当前行
    $1 表示文本行被分隔后的第 1 个字段列
    $n 表示文本行被分割后的第 n 个字段列
    NR 表示文件行号
    NF 表示文件中的当前行列的个数
    FS 表示 awk 的输入分隔符,默认分隔符为空格和制表符,你可以对其进行自定义设置
    OFS 表示 awk 的输出分隔符,默认为空格,你也可以对其进行自定义设置
    FILENAME 表示当前文件的文件名称,如果同时处理多个文件,它也表示当前文件名称

    命令实例

    # awk 命令的可执行脚本代码使用单引号括起花括号,里面就是一些可执行的脚本代码段,当 awk 每读取一行之后,它会依次执行双引号里面的每个脚本代码段。$0 表示当前行。依次将 /etc/passwd 文件的每一行内容打印输出
    awk '{print $0}' /etc/passwd
    # 打印输出文件的每一行的第 1 列内容
    awk '{print $1}' awesome.txt
    # 打印输出文件的每一行的第 1 列、第 2 列和第 3 列内容,逗号表示插入输出分隔符,也就是默认的空格
    awk '{print $1, $2, $3}' awesome.txt
    # 在参数列表中加入一些字符串或者转义字符,要使用双引号,使输出更格式化
    awk '{print $1 "\t" $2 "\t" $3}' awesome.txt
    # 显示行号和每行的列数,$NF即为每一行的最后一列,$(NF-1) 表示倒数第 2 列, $(NF-2) 表示倒数第 3 列
    awk '{print NR "\t" NF "\t" $0}' awesome.txt
    awk '{print $(NF - 1)}' awesome.txt
    # awk 默认分割符为空格和制表符,使用 -F 参数来指定自定义分隔符。将 /etc/passwd 文件中的每一行用冒号 : 分割成多个字段,然后用 print 将第 1 列字段的内容打印输出
    awk -F ':' '{print $1}' /etc/passwd
    # 通过对 $2 变量进行重新赋值,来隐藏每一行的第 2 列内容,并且用星号 * 来代替其输出
    awk '{$2 = "***"; print $0}' awesome.txt
    # 采用冒号分隔数据,输出第一列数据
    awk -F ":" '{print $1}'
    # 花括号{}表示规定它前面的字符必须出现的次数;用法和其他命令如find&grep非常类似。
    # /go{2,3}d/    表示字母 "o" 只能可以出现 2 次或者 3 次
    # /go{2,10}d/   表示字母 "o" 只能可以出现 2~10 次
    # /go{2,}d/     表示字母 "o" 必须至少出现 2 次
    # 只匹配字符串"good";
    awk '/go{2}d/{print $0}' awesome.txt
    
    # 正则表达式中的圆括号表示将多个字符当成一个完整的对象来看待。比如 /th(in){1}king/ 就表示其中字符串 “in” 必须出现 1 次。不加圆括号就变成 /thin{1}king/ 这个就表示其中字符 “n” 必须出现 1 次。
    awk '/th(in){1}king/{print $0}' awesome.txt
    # 正则表达式中的问号 ? 表示它前面的字符只能出现0或1次
    awk '/ba?d/{print $0}' awesome.txt
    
    

    上面都是对一个文本的操作;awk可以对多个文本进行操作,变量 FILENAME 表示当前文本行所在的文件

    awk '{print FILENAME "\t" $0}' awesome.txt johnny.txt
    

    使用数学运算&条件判断

    ~ 匹配正则表达式
    !~ 不匹配正则表达式
    
    # 先声明两个变量,然后用 print 打印出计算结果;awk针对文件的每一行执行一次单引号里面的脚本代码,但 BEGIN 和 END 关键字后面的 脚本代码除外,如果被处理的文件中什么都没有,那 awk 就一次都不会执行
    awk '{a = 12; b = 24; print a + b}' awesome.txt
    # 判断文件的第 3 列数据,满足条件则打印输出
    awk '$3 < 500 {print $0}' awesome.txt
    awk '{if ($3 < 500) print $0}' awesome.txt
    awk '$1 == "yahoo" {print $0}' company.txt
    

    在awk的结果基础上,结合sort、uniq和head等命令可以轻松完成频率统计等功能。
    要知道还有书籍专门讲解awk命令使用,算得上是一门编程语言,还有很多功能有待开发使用。

    ag

    比grep、ack更快的递归搜索文件内容。ag ‘hello wor’,非精确匹配;

    参考

    linux中强大且常用命令:find、grep

    展开全文
  • ####公共函数-替换文件中字符串,替换整行字符串 ####函数参数样例:file_match "/etc/httpd/conf/httpd.conf" "KeepAlive " "KeepAlive on" ####参数1:文件路径和文件名称 ####参数2:需要匹配的关键字 ####参数3:...
  • #首先查找个数(sed -n) find . -name '*.htm' | xargs sed -n '/old/p' #然后替换(sed -i) find . -name '*.htm' | xargs sed -i 's/old/new/g' 使用grep和sed grep -l old *.htm | xargs sed -n "/...
  • notepad整行替换内容

    千次阅读 2020-01-28 20:42:01
    网上看到很多关于notepad整行替换的内容,但是都感觉讲的不是很清楚 ,今天详细记录下。 基础知识 在说notepad整行替换之前首先要明确各系统之间不同的行尾符: Windows:\r\n Linux:\n Mac:\r 上面提到的\r(即...
  • 当你在使用文本文件时,很可能需要查找替换文件中的字符串。sed 命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 sed 命令来完成。 sed 命令是什么 sed 命令表示 Stream Editor(流编辑器),用来在...
  • Vim查找替换操作 --- 查找和替换

    千次阅读 2018-10-25 09:58:57
    查找替换  查找和替换是编辑器中最常用的功能之一,在普通编辑器当中查找替换时,你可能需要先移动鼠标在菜单中点击查找的功能,输入查找内容,再点击确认查找。而在vim中,所有的操作只需要敲击几下键盘就行了,...
  • 使用脚本批量替换文本内容

    千次阅读 2019-10-13 19:07:00
    很多时候,我们需要进行多个...如下是一个简单的脚本来实现多文件查找替换处理。 脚本内容 1 2 3 4 5 6 7 8 #!/bin/sh # $1 search_keyword # $2 replace_original # $3 replace_destination # $4 search file ...
  • 有这样一个需求,我们查找文件中带有某个关键词的一行内容后,对该行内容进行替换替换成我们需要的新内容,比如修改网络配置文件、修改图片地址、修改代码中所有关键词等,类似于编辑器中的关键词替换功能,只...
  • 用c++实现在一个txt文件查找字符

    热门讨论 2011-12-28 14:43:47
    用c++实现在一个txt文件查找字符,算法就是字符串匹配,没什么技巧性,最后还给出了运行时间,适合初学者参考
  • 当你在使用文本文件时,很可能需要查找替换文件中的字符串。sed命令主要用于替换一个文件中的文本。在Linux中这可以通过使用 sed命令和 awk 命令来完成。 在本教程中,我们将告诉你使用 sed 命令如何做到这一点...
  • 将1.txt中每一行的\\替换成\ 例如:ordertest1\\ordertest1.csproj
  • 当你在使用文本文件时,很可能需要查找替换文件中的字符串。sed 命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 sed 命令和 awk 命令来完成。 作者:Magesh Maruthamuthu来源:Linux中国|2019-09-...
  • Vim查找替换

    2019-03-19 00:07:39
    Vim查找替换 1.字符的替换及撤销(Undo操作) 1.1 替换和撤销(Undo)命令   替换和Undo命令都是针对普通模式下的操作; 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换,直到按...
  • ubuntu使用教程

    万次阅读 多人点赞 2020-01-15 17:53:05
     什么是文件系统: 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。  两种文件系统的对比: LInux目录结构: / : 所有目录都在 /boot : boot 配置文件、...
  • 在要替换的项目中 或者是全部的项目中 右键中有下面截图中的选项 ...第一行中的数据是要查找的数据 第二行中输入的是要全局替换的数据 replace是一行一行替换 all是下面显示的结果中的数据都进行替换 ...
  • 本文是要讲linux 不打开文档/文件的情况下,替换文本内容。 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 。...s (substitute)为查找替换命令 # 在输出或打印中,替换字符串。并...
  • AWK

    千次阅读 多人点赞 2019-06-06 23:35:35
    1.Centos中的文本处理工具 1)grep,egrep,fgrep:基于pattern(模式)的文本过滤工具 2)sed:流编辑器,行编辑器;通过模式空间,保持空间实现编辑 3)AWK:报告生成器,实现格式化文本输出 gawk - pattern ...
  • sed 命令主要用于替换一个文件中的文本。-- Magesh Maruthamuthu当你在使用文本文件时,很可能需要查找替换文件中的字符串。sed命令主要用于替换一...
  • 为啥写就不说了,一句话就是特喵的掏大粪的活都让干了,没办法。 目标:检查那个逼没交健康码。 步骤:1.将手动保存的图片列出来,并拿到人名; 2.对比全员人名,输出没交...健康码图片保存在这个文件中 #!/bin/bash
  • UltraEdit文本替换

    2021-01-05 20:30:25
    UltraEdit文本替换 特殊字符 ^^ 搜索字符“^” ^s 宏执行时搜索选定 (加亮) 的文本 ^c 宏执行时搜索剪贴板的内容 ^b 匹配一个分页符 ^p 匹配一个换行符 (CR/LF) (段落) (DOS 文件) ^r 匹配一个换行符 (仅 CR) ...
  • python修改文件时,使用w模式会...替换文本中的taste 为 tastingYesterday when I was young昨日当我年少轻狂The taste of life was sweet生命的滋味是甜的As rain upon my tongue#将文件读取到内存中with open(&quo...
  • 超好用的一款文本编辑器,无论在查找文件、批量替换、宏指令等方面都有卓越的表现,中文版,无需安装,纯绿色版
  • Python入门

    千次阅读 多人点赞 2017-12-13 15:05:02
    如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释 # -*- coding: utf-8 -*- Python中的整数和浮点数 运算规则符合数学规则,用法跟...
  • 替换式:db2 \"delete from \1 \" \r\ndb2 \"import from \.\/data\/\1\.ixf of ixf modified by identityignore insert into \1 \" 输入: PERMODLOG RESERVEDETAIL RESERVEMAIN 输出: ...
  • 当你在使用文本文件时,很可能需要查找替换文件中的字符串。sed命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用sed命令和awk命令来完成。 在本教程中,我们将告诉你使用sed命令如何做到这一点,...
  • 网上找了很多例子,都不是我想要的效果。...效果如图(在txt中查找'/192.168.1.104'字符串,找到存在该字符串的一行,整一行替换成新的字符串'/192.168.1.104:21514 data: +RC012000044444444444444444444444...
  • 适合文件中只有一个指定字符串的行 原文章:https://blog.51cto.com/wutaoblog/1184819 #!/bin/bash #查找的字符串 str1=“string1” #新字符串 newstr=“string2” #被替换的文件名 filename=“filename” #获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,281
精华内容 7,312
关键字:

文本文件查找替换整行