安卓linux shell 修改文本,linux shell 修改文本 sed

本文介绍了如何在Linux shell中使用echo进行文本写入,cat查看文件内容,以及sed命令进行文本替换、追加和正则表达式操作。重点展示了sed的强大功能,如替换、插入、删除和使用特殊字符的处理技巧。
摘要由CSDN通过智能技术生成

linux shell 修改文本

echo

[[email protected] tmp]#echo ‘yhqt1 test1‘ > test1.txt

[[email protected] tmp]#cat test1.txt

yhqt1 test1

[root@DSI tmp]#echo ‘yhqt2 test2‘ > test1.txt

[[email protected] tmp]#cat test1.txt

yhqt2 test2

[root@DSI tmp]#echo ‘yhqt1 test1‘ >> test1.txt ##追加

[[email protected] tmp]#cat test1.txt

yhqt2 test2

yhqt1 test1

##增加文本

[[email protected] tmp]#cat >> test1.txt << EOF

export HISTTIMEFORMAT=‘%F %T ‘

EOF

sed

[[email protected] tmp]#sed -i ‘$a test3‘ test1.txt ##$最后一行,a是新增

[[email protected] 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数据

[[email protected] tmp]#cat test1.txt

yhqt2 test2

test71111yhqt1 test1

test5

test6

test4

test3

test71111

##如果只向第二个test7后面增加一行,可以先获取第二个test7的行号,然后根据此行号在后面增加一行数据##获取行号

[[email protected] 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

test71111yhqt1 test1

test5

test6

test4

test3

test72222

1111[root@DSI tmp]#sed ‘s/test5/& yhq1314/g‘ test1.txt ##在指定行test5后面增加数据yhq1314

yhqt2 test2

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111[root@DSI tmp]#sed -i ‘s|test2|test222|‘ test1.txt ##对字符串进行替换test2替换为test222

[[email protected] tmp]#cat test1.txt

yhqt2 test222

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111[root@DSI tmp]#sed -i ‘$a yhq,abc1,3456‘ test1.txt

[[email protected] tmp]#cat test1.txt

yhqt2 test222

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111yhq,abc1,3456[root@DSI tmp]#sed -i ‘s|,|*|‘ test1.txt ##替换特殊字符

[[email protected] tmp]#cat test1.txt

yhqt2 test222

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111yhq*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

[[email protected] 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会移除匹配样式的行,在空白行中,行尾标记紧随着行首标记

[[email protected] tmp]#cat test1.txt

yhqt2 test222

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111yhq*abc1,3456xxx

[root@DSI tmp]#sed -i ‘/^$/d‘ test1.txt

[[email protected] tmp]#cat test1.txt

yhqt2 test222

test71111yhqt1 test1

test5 yhq1314

test6

test4

test3

test71111yhq*abc1,3456xxx

2 已匹配字符串标记&

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

[[email protected] tmp]#echo this is an example | sed ‘s/\w\+/[&]/g‘

[this] [is] [an] [example]##正则表达式\w\+ 匹配每一个单词,然后用[&]替换它,&对应于之前所匹配到的单词

3 子串匹配标记\1

&代表匹配给定样式的字符串,但也可以匹配给定样式的其中一部分

[[email protected] tmp]#echo this is digit 7 in a number | sed ‘s/digit \([0-9]\)/\1/‘

this is 7 ina 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表达式通常用单引号来引用。也可以使用双引号。双引号会通过对表达式求值来对其进行扩展

[[email protected] tmp]#text=hello

[[email protected] tmp]#echo hello world | sed "s/$text/HELLO/" ##$text的求值结果是hello

HELLO world

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安卓系统下的bash shell,ssh服务器,gcc编译器以及vim文本编辑器等 使用vim编辑多个文件 vim file1 file2 file3 ... :next查看或编辑后一个文档的内容 :prev查看或编辑前一个文档的内容 :first查看或编辑第一个文档的内容 :last查看或编辑最后一个文档的内容 vim -o|-O file1 file2 file3 -o:水平显示多个文件 -O:垂直显示多个文件 Ctrl+w arrow(箭头) 光标移动 Ctrl+w,s讲一个文件水平分屏显示 Ctrl+w,v将一个文件垂直分屏显示 :qa 全部退出 :wa 全部保存 将其他文件中的内容填充到当前文件中 :r (/PATH/TO/SOMEFILE)这是解释 跟shell交互 :!命令(command) 部分另存为 :w(全部保存) :m,nw(从第m行到第n行) :m,+n :.,$w 默认系统中所支持的shell cat /etc/shells bash特性 命令别名:自定义命令 alias:可以用来定义和设置命令的别名 注意:使用alias命令定义的别名其生命周期仅限于当前shell的生命期;如果修改.bashrc配置文件,其中保存的别名并不会立即生效,只有在重新加载该文件内容之后才会生效且永久生效;为了能够保证设置别名有效,通常两种操作都做 撤销别名:unalias . .bashrc:将.bashrc的命令读取 命令历史: bash进程会保存其会话中用户曾经执行的命令,以方便用户重复执行某个命令通过bash提供的历史命令文件来持久保存此前执行过的命令,用户由私有历史文件 登陆shell的时候,bash会自动读取~/.bash_history文件中所记录的所有命令 history命令: -c:清空历史缓冲区中的历史命令; -d OFFSET:删除特定历史命令条目; 重复执行前一个命令的方法: 使用上方向箭头,回车执行 Ctrl+p !-1 !! 重复执行历史缓冲区的命令 !#(#=数字):重复执行历史命令中的编号为#的命令 !(string)字符串:从历史缓冲区中查找最近一次执行过的以string开头的命令并执行 !?string:从历史缓冲区中查找最近一次包含string的命令并执行 !- number:执行历史缓冲区中倒数第number个命令 Ctrl+r:在历史缓冲区中实施搜索,回车执行即可: 重复使用历史命令中的一部分: !$ 、ESC .、ALT+:表示最后一次命令中最后一个参数; !^:第一个位置的参数 !:number:最后一次命令中第number个位置的参数 !number1:number2在历史缓冲区中第number1个命令的第number2个参数 快捷键 C-->Ctrl M-->Alt E-->Esc DEL-->Backspace C-l:clear 清屏 C-a:将光标跳至命令行行首 C-e:将光标跳至命令行行尾 C-k:删除光标所在位置至行尾的命令行信息 C-u:删除光标所在位置至行首的命令行信息 C-c:结束前台进程。取消命令的运行 命令补全机制: 命令本身字符串的补全 参数的补全 使用TAB键可以完成命令补全: 如果给出的字符串不能作为唯一标识,则bash不予补全;再次敲击TAB键,bash会给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找; 命令行展开: ~:bash会自动将其展开为当前登陆用户的家目录 ~STRING:bash会自动将其展开为以STRING为用户名为用户的家目录 ~+:调用shell变量pwd的值 ~-:调用shell变量oldpwd的值 {}:在花括号中可以填充一个以","分隔的路径列表,bash会将其展开为多个独立的路径; 命令的执行结果 任何以个Linux命令都有两种执行结果: 命令的正常输出结果:跟用户需求相关的返回内容: ``:反向单引号,反引号 $():标准的命令引用格式 wc:统计一个文件中的行数、字数及字节数 -c:只显示字节数 -l:只显示行数 -w:只显示字数 命令的执行状态返回值;跟命令执行成与否相关的返回命令 引用功能: '':强引用 凡是被单引号引用的内容,bash一律将其视为普通字符,即便本身有特殊功能和作用也是如此,但是单引号本身是个例外 "":弱引用 被双引号引用的内容有一些特殊字符仍然会保留器特殊含义 比如:$、\、"" 转义功能:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值