linux shell 修改文本
echo

[root@DSI tmp]# echo 'yhqt1 test1' > test1.txt
[root@DSI tmp]# cat test1.txt
yhqt1 test1
[root@DSI tmp]# echo 'yhqt2 test2' > test1.txt
[root@DSI tmp]# cat test1.txt
yhqt2 test2
[root@DSI tmp]# echo 'yhqt1 test1' >> test1.txt ##追加
[root@DSI tmp]# cat test1.txt
yhqt2 test2
yhqt1 test1

##增加文本

[root@DSI tmp]# cat >> test1.txt << EOF
export HISTTIMEFORMAT='%F %T '
EOF

sed

[root@DSI tmp]# sed -i '$a test3' test1.txt ##$最后一行,a是新增
[root@DSI tmp]# cat test1.txt
yhqt2 test2
yhqt1 test1
test3
[root@DSI tmp]# sed '/yhqt1/a\test4' test1.txt ##在yhqt1 行后面增加一行test4
yhqt2 test2
yhqt1 test1
test4
test3
[root@DSI tmp]# sed '/yhqt1/a\test5\ntest6' test1.txt ##在yhqt1 行后面增加2行
yhqt2 test2
yhqt1 test1
test5
test6
test3
[root@DSI tmp]# sed '/yhqt1/i\test7' test1.txt ##在yhqt1行前面增加一行test7
yhqt2 test2
test7
yhqt1 test1
test3
[root@DSI tmp]# cat test1.txt
yhqt2 test2
test7
yhqt1 test1
test5
test6
test4
test3
test7
[root@DSI tmp]# sed -i '/test7/a\1111' test1.txt ##存在多行test7的情况,每个匹配的地方都会新增一行1111数据
[root@DSI tmp]# cat test1.txt
yhqt2 test2
test7
1111
yhqt1 test1
test5
test6
test4
test3
test7
1111
##如果只向第二个test7后面增加一行,可以先获取第二个test7的行号,然后根据此行号在后面增加一行数据
##获取行号
[root@DSI tmp]# cat -n test1.txt |grep test7 |awk ' {print $1}'|sed -n "2"p
9
[root@DSI tmp]# sed -n '/test7/=' test1.txt |sed -n "2"p
9
[root@DSI tmp]# sed -e '9a\2222' test1.txt
yhqt2 test2
test7
1111
yhqt1 test1
test5
test6
test4
test3
test7
2222
1111
[root@DSI tmp]# sed 's/test5/& yhq1314/g' test1.txt ##在指定行test5后面增加数据yhq1314
yhqt2 test2
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111
[root@DSI tmp]# sed -i 's|test2|test222|' test1.txt ##对字符串进行替换test2替换为test222
[root@DSI tmp]# cat test1.txt
yhqt2 test222
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111
[root@DSI tmp]# sed -i '$a yhq,abc1,3456' test1.txt
[root@DSI tmp]# cat test1.txt
yhqt2 test222
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111
yhq,abc1,3456
[root@DSI tmp]# sed -i 's|,|*|' test1.txt ##替换特殊字符
[root@DSI tmp]# cat test1.txt
yhqt2 test222
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111
yhq*abc1,3456

sed是stream editor(流编辑器)的缩写,是文本处理中非常重要的工具,配合正则表达式进行使用功能更强大。
sed可以替换给定文本中的字符串,可以利用正则表达式进行匹配

$ sed 's/pattern/replace_string/' file

或者

$ cat file |sed 's/patter/replaces_string/' file

使用 -i选项,可以将替换结果应用于原文件,很多在进行替换之后,借助重定向来保存文件

$ sed 's/text/replace/' file > newfile
$ mv newfile file

其实就是一个命令
$ sed -i 's/text/replace/' file
如果需要替换每一行中满足条件的内容,加参数g
$ sed 's/pattern/replace_string/g' file
后缀/g意味着sed会替换每一处匹配,如果需要从N+1开始匹配,加参数N

[root@DSI tmp]# echo this thisthisthis | sed 's/this/THIS/2g'
this THISTHISTHIS
[root@DSI tmp]# echo this thisthisthis | sed 's/this/THIS/3g'
this thisTHISTHIS
[root@DSI tmp]# echo this thisthisthis | sed 's/this/THIS/4g'
this thisthisTHIS

#当需要从第N出匹配开始替换时,可以使用/Ng
字符/在sed中作为定界符使用。可以像下面一样
sed 's:text:replace:g'
sed 's|text|replace|g'
当定界符出现在样式内部时,必须使用前缀\对它进行转义
sed 's|te\|xt|replace|g'
\|是一个出现在样式内部并经过转义的定界符

1 移除空白行

$ sed '/^$/d' file ##/pattern/d会移除匹配样式的行,在空白行中,行尾标记紧随着行首标记
[root@DSI tmp]# cat test1.txt
yhqt2 test222
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111 yhq*abc1,3456
xxx [root@DSI tmp]# sed -i '/^$/d' test1.txt
[root@DSI tmp]# cat test1.txt
yhqt2 test222
test7
1111
yhqt1 test1
test5 yhq1314
test6
test4
test3
test7
1111
yhq*abc1,3456
xxx

2 已匹配字符串标记&
在sed中,用&标记匹配样式的字符串,就能够在替换字符串时使用已匹配的内容

[root@DSI tmp]# echo this is an example | sed 's/\w\+/[&]/g'
[this] [is] [an] [example]
##正则表达式\w\+ 匹配每一个单词,然后用[&]替换它,&对应于之前所匹配到的单词

3 子串匹配标记\1
&代表匹配给定样式的字符串,但也可以匹配给定样式的其中一部分

[root@DSI tmp]# echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/'
this is 7 in a number
##这个命令将digit 7替换为7.样式中匹配到的子串是7,\(pattern\)用于匹配子串,模式被包括在使用斜线转义过的()中,对于匹配到的第一个子串,
其对应的标记是\1,匹配到的第二个子串是\2,往后依次类推
[root@DSI tmp]# echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
EIGHT seven
##([a-z])\+\)匹配第一个单词,\([A-Z]\+\)匹配第二个单词,\1,\2用来引用他们,这种引用称为向后引用,在替换部分,他们的次序被更改
为\2\1,因此结果就是逆序

4 组合多个表达式
sed 'expression' | sed 'expression'
等价于
$ sed 'expression; expression'
5 引用
sed表达式通常用单引号来引用。也可以使用双引号。双引号会通过对表达式求值来对其进行扩展

[root@DSI tmp]# text=hello
[root@DSI tmp]# echo hello world | sed "s/$text/HELLO/" ##$text的求值结果是hello
HELLO world

linux shell 修改文本 sed的更多相关文章

  1. Linux Shell处理文本最常用的工具大盘点

    导读 本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实 ...

  2. linux shell grep/awk/sed 匹配tab

    处理文件的命令实在是多, sed, awk, grep等.遇到了需要匹配tab的情况, 记录一下. 例子如下:找出文本中第一列是1的行. 文本a 解法1 : 直接使用正则表达式, ^表示开头, \t表 ...

  3. linux shell 去掉文本处理中的双引号

    cat aa.txt |sed 's/\"//g'  结果是:hello aa.txt "hello"

  4. linux shell中使用sed命令

    例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...

  5. Linux shell - 修改文件所属用户和组 (chown, chgrp)

    在工作中,会遇到这样的情况,需要把目录所属的的root用户更改到普通用户,root组更改到普通组. sha-q:/ # ll drwxr-xr-x 2 root root 4096 2014-09-1 ...

  6. Linux Shell 文本处理工具集锦--Awk―sed―cut(row-based, column-based),find、grep、xargs、sort、uniq、tr、cut、paste、wc

    本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

  7. Linux Shell 文本处理工具集锦 zz

    内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...

  8. Linux Shell 文本处理工具集锦

    本文将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: ...

  9. [转] Linux Shell 文本处理工具集锦

    内容目录: find 文件查找 grep 文本搜索 xargs 命令行参数转换 sort 排序 uniq 消除重复行 用tr进行转换 cut 按列切分文本 paste 按列拼接文本 wc 统计行和字符 ...

随机推荐

  1. UVA-10603 Fill (BFS)

    题目大意:有三个已知体积但不知刻度的杯子,前两个杯子中初始时没有水,第三个装满水,问是否可以倒出d升水,如果倒不出,则倒出一个最大的d’,使得d’<=d,并且在这个过程中要求总倒水量最少. 题目 ...

  2. 056——VUE中vue-router之路由参数的验证处理保存路由安全

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. iOS笔记之ScrollView

    ScrollView三个基本的要理解的属性: contentSize The size of the content view.所以很好理解,contentSize也就是scrollView可滚动的区 ...

  4. BigDecimal 、BigInteger

    package com.BigDecimal; public class BigDecimalDemo { /* * 下面的运算的结果出乎我们的意料,有些准确,有些不准确 * 这是为什么呢? * 我们 ...

  5. 201621123006 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  6. SharePoint开发 - TimerJob简单实例讲解

    博客地址 http://blog.csdn.net/foxdave SharePoint中的TimerJob类似于Windows系统的计划任务,可以实现定时执行指定操作的功能. 本篇所述的实例为在Sh ...

  7. 2018.12.25 SOW

    1. Understanding Customer Requirements 11.1. Project Overview 21.2. System Requirements 21.3. Indust ...

  8. 实现react中的自动保存--定时任务

    1. 定义和用法 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或 ...

  9. 仿智能社官网:原生JS实现简单又酷炫的3D立方体时钟

    先放一下我做的效果:https://linrunzheng.github.io/3Dclock/3Dclock/new.html 至于3D立方体怎么做这里就不在阐述了,可以看一下我之前的博客. 这里默 ...

  10. 第30课 C语言中的字符串

    任意的软件开发过程都会涉及到字符串,字符串的概念: ca是字符数组,其他几个都是字符串,因为最后都有'\0'. 示例程序如下: #include <stdio.h> int main() ...