首页 > 系统相关 >Linux-sed命令

Linux-sed命令

时间:2023-10-25 18:34:05浏览次数:36  
标签:文本 匹配 eg 命令 sed Linux input txt

Linux-sed命令

sed(Stream EDitor):流编辑器,是一个非交互式命令行文本编辑器。用于在一个输入流(一个文件或者管道上的输入)上执行基本文本的转换

语法

完整的sed命令格式

sed OPTIONS ...[SCRIPT] [INPUTFILE...]

OPTIONS:表示选项
SCRIPT:表示脚本,脚本由地址(addr)、命令(options)两部分组成。地址就是地址范围,命令仅在匹配的行上执行
INPUTFILE:输入文件或者管道上的输入

eg:
替换input.txt文件中所有"hello"转变为"one"

INPUTFILE为输入文件,且输出到终端窗口(标准输出)
sed 's/hello/one/g' 'input.txt'
INPUTFILE为管道上的输入,且输出到output.txt(标准输出重定向到output.txt文件,覆盖output.txt的内容)
cat input.txt |sed 's/hello/one/g' > 'output.txt'

常用的命令行选项

--version
打印sed版本

--help
打印命令行选项的用法

-n
--quiet
--silent
取消打印模式空间的内容,即不输出文本转换结果到终端窗口

-e SCRIPT
--expression=SCRIPT
添加脚本命令,在处理输入时执行

-f SCRIPT-FILE
--file=SCRIPT-FILE
添加脚本文件,在处理输入时执行

-i[SUFFIX]
--in-place[=SUFFIX]
就地修改文件,将文本转换结果输出到原文件中,SUFFIX可选,用来备份之前文件中的内容
eg:
替换input.txt文件中所有"hello"转变为"one",并且将原文件备份到当前路径下
sed -i./*.bak 's/hello/one/g' input.txt

如果sed命令行中没有给出 -e | --expression 或 -f | --file 的选项,会将第一个非选项参数作为需要执行的脚本(SCRIPT)
如果在处理上述操作后仍有任何命令行参数,这些参数将认为输入文件的名称被处理,文件名为'-'时,表示标准输入流。如果未指定文件名,则处理标准输入

sed脚本

脚本命令格式
[addr]X[options]

X:单个字母的sed命令
addr:可选的地址范围,如果addr被指定,X命令只在匹配的行中执行
options:附加的选项,用于一些sed命令(不常用)


单个字母的sed命令(X)
#
单行注释

q
退出sed,无需处理更多的命令或输入
eg: 打印第二行后退出
sed '2q' input.txt

d
删除模型空间
eg: 删除第二行输入
sed '2d' input.txt

p
打印模型空间
eg: 仅打印第二行输入
sed '2d' input.txt

n
如果未禁用自动打印,则打印模型空间,之后将模型空间替换为下一行输入,如果没有更多输入,则退出sed
eg:
每3行执行替换命令
sed 'n;n;s/./x/'

a text
或
a \text
在每一行后附加text文本
eg: 在第二行后附加空格test文本
sed '2a\ test' input.txt

i text
或
i \text
在每一行前附加text文本
eg: 在第二行前附加空格test文本
sed '2i\ test' input.txt

c text
或
c \text
将每一行替换为text文本
eg: 将第二行替换为空格test文本
sed '2c\ test' input.txt

r filename
将每一行后附加filename文件中的文本
eg: 将第二行后附加out.txt文件中的文本内容
sed '2r out.txt' input.txt

w filename
将每一行的文本输出到filename文件中
eg: 将第二行的文本输出到out.txt文件中
sed '2w out.txt' out.txt

s
文本替换
s命令的格式
's/regexp/replacement/flags'
regexp: 正则表达式
replacement: 替换的文本
flags: 标志(s命令后面可以加零个或多个标志)

flags中有以下几个常用的:
g: 将替换所有正则表达式(regexp)匹配到的文本,不仅仅是每一行中的第一个(默认不加flags是匹配每一行中的第一个)
number: 数字,仅替换第number个匹配的文本
i或I: 忽略大小写,在匹配时忽略正则表达式的大小写(regexp)
w filename: 将替换后的结果写入filename文件中,即将发送替换的行写入文件中,文件名支持/dev/stderr(标准错误)和/dev/stdout(标准输出)
eg:
将input.txt中所有匹配到"hello"的词替换为one
sed 's/hello/one/g' input.txt
将input.txt中每一行的第二次匹配到"hello"的词替换为one
sed 's/hello/one/2' input.txt
将input.txt中匹配到"hello"的词替换为one的行输出到out.txt文件中
sed 's/hello/one/w out.txt' input.txt



可选的地址范围(addr)
number
指定的行数,仅匹配指定的行数

$
最后一个文件的最后一行,仅匹配最后一个文件的最后一行

first~step
first:第一次匹配的行数,step:步长,走step步后匹配
eg: 替换2行以及从2行开始每走2行(每隔1行)进行替换,替换文本为test
sed '2~2 c test' input.txt

/regexp/
正则表达式,匹配与正则表达式匹配的行
eg: 仅打印input.txt文件中以"test"结尾的行到终端窗口
sed -n '/test$/p' input.txt

first,end
从第first行开始匹配到end行(包含)
eg: 仅打印input.txt文件中2-5行的文本内容
sed -n '2,5p' input.txt

sed中的正则表达式语法

char
一个普通字符与自身匹配

*
匹配零个或多个前一个表达式
eg:
'a*b':可以匹配 'b','ab','aaaab'

\+
和*类似,只能匹配一个或多个前一个表达式

\?
和*类似,只能匹配零个或一个前一个表达式
eg:
'a\?b':只能匹配 'b','ab'

.
匹配任意一个字符,包括换行符
eg:
'.*':可以匹配每个字符串,包括空字符串

^
匹配输入字符串开始位置
eg:
'^#':匹配以#号开头的行

$
匹配输入字符串结尾位置
eg:
'\\$':匹配以反斜杠结尾的字符串,两个'\'相当于对'\'做转义
'\$':匹配$字符串,特殊字符前加'\'相对于对特殊字符做转义

[list]
匹配list列表中任何单个字符
eg:
'[ae]':匹配所有带有a或e字符的行

参考网址

GNU软件-sed官方网址:https://www.gnu.org/software/sed/
sed相关博客:https://www.cnblogs.com/alongdidi/p/sed.html

标签:文本,匹配,eg,命令,sed,Linux,input,txt
From: https://www.cnblogs.com/shenStudy/p/17787866.html

相关文章

  • Linux/UNIX系统编程手册 Michael Kerrisk/孙剑 pdf电子版
    Linux/UNIX系统编程手册MichaelKerrisk/孙剑pdf电子版下载作者: MichaelKerrisk / 孙剑原作名: TheLinuxProgrammingInterface:ALinuxandUNIXSystemProgrammingHandbook出版年: 2014-1ISBN: 9787115328670连接提取码:hfkr内容确实组织得比APUE更适合系统学习......
  • docker常用命令总结
    docker常用命令总结:#查看本地docker镜像dockerimages#拉取远程镜像到本地dockerpullpig4cloud/java:8-jre#删除本地docker镜像dockerrmi镜像ID#根据dockerfile构建docker容器dockerbuild-tmes-md:0.3.#运行docker容器dockerrun-d-p8090:8090--ne......
  • 常用的DOS命令有哪些?
    DOS(DiskOperatingSystem)是一种早期的操作系统,具有一系列的命令行命令,用于管理文件、运行程序和执行各种操作。以下是一些常用的DOS命令:dir:列出当前目录中的文件和子目录。cd:改变当前目录。md:创建新目录。rd:删除目录。copy:复制文件或目录。del:删除文件。ren:重命名文件或目录。type......
  • Android系统SELinux详解
    前言SELinux是一种加强文件安全的一种策略,可以更好地保护我们的Android系统,比如限制系统服务的访问权限、控制应用对数据和系统日志的访问等措施,这样就降低了恶意软件的影响,并且可以防止因代码存在的缺陷而产生的对系统安全的影响。从系统安全方面考虑,SELinux是保护神,但是从软件开......
  • Linux Mint 21.2 “EDGE” ISO 发布
    Linux Mint团队近日宣布发布最新LinuxMint21.2“Victoria“版本的“EDGE“ISO版本,并提供下载。“这个镜像是为那些硬件太新而无法启动LinuxMint21.x中包含的5.15LTS内核的用户制作的。LinuxMint21.2“Victoria“于2023年7月中旬发布,基于Ubuntu22.0......
  • Linux-批量杀死进程
    (一)前言在Linux操作系统中,一般常用的杀死进程的命令是 kill 、 pkill 、 killall ,根据杀死单个进程拓展至批量杀死进程。1、查看指定名称的进程,如下查看运行wps程序的进程:ps-ef|grepwps|grep-vgrep2、根据进程号(PID)杀死进程:第二列显示的就是进程号 kill 命令......
  • linux vmware导出windows11到virtual box
    如果直接使用virtualbox导入会报错Hostresourceoftype"OtherStorageDevice(20)"issupportedwithSATAAHCIorvirtio-scsicontrollersonly,line48(subtype:vmware.nvme.controller).找到导出目录下的ovf文件,上面说的是48行,那么找到48行<Item>......
  • Metasploit Linux Reverse_Tcp Shellcode 源码分析
    分析Metasploitlinux/x64/shell/reverse_tcpshellcodeShellcode生成使用msfvenom生成c格式的stagedshellcode$msfvenom-plinux/x64/shell/reverse_tcp-fc-ax64--platformlinuxLHOST=192.168.48.233LPORT=4444Payloadsize:130bytesFinalsizeofcf......
  • git初始化命令(备忘录)
    首先你得先创建好仓库,然后知道仓库地址,接下来你才能接下来:(1)提交路径:gitremoteaddorigin你要上传的仓库地址(2)确认添加文件:gitadd. (添加所有文件)(3)提交备注:gitcommit-m“提交信息”(双引号里面可以中文,说明这次提交的备注内容)(4)提交命令:gitpush-uoriginmaster(上传......
  • Linux-yum卸载软件包
    yum是Linux操作系统中最常用的软件包管理器之一,它可以帮助你很容易地安装、删除和更新软件包。然而,有时候yum在删除软件包时可能会出现一些问题,本文将告诉你如何正确地使用yum卸载软件包,并解决常见的问题。1.检查软件包是否存在在使用yum删除软件包之前,首先要检查软件包是否已经......