sed

bash, extract string before a colon

非 Y 不嫁゛ 提交于 2020-02-12 06:46:06
问题 If I have a file with rows like this /some/random/file.csv:some string /some/random/file2.csv:some string2 Is there some way to get a file that only has the first part before the colon, e.g. /some/random/file.csv /some/random/file2.csv I would prefer to just use a bash one liner, but perl or python is also ok. 回答1: cut -d: -f1 or awk -F: '{print $1}' or sed 's/:.*//' 回答2: Another pure BASH way: > s='/some/random/file.csv:some string' > echo "${s%%:*}" /some/random/file.csv 回答3: Try this in

sed(流编辑器)详解

青春壹個敷衍的年華 提交于 2020-02-12 04:44:02
sed: Stream EDitor 行编辑器 (全屏编辑器: vi) sed: 模式空间 默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕。 sed [ options ] 'AddressCommand' file ... Options: - n : 静默模式,不再默认显示模式空间中的内容 - i : 直接修改原文件 - i . bak 备份原文件 - e SCRIPT - e SCRIPT : 可以同时执行多个脚本,多点编辑 - f / PATH / TO / SED_SCRIPT 从指定文件中读取脚本 sed - f / path / to / scripts file - r : 表示使用扩展正则表达式 Address: 1 、StartLine , EndLine 比如 1 , 100 $:最后一行 2 、 / RegExp / / ^ root / 匹配以root开头的行 3 、 / pattern1 / , /pattern2/ 第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行 4 、LineNumber 指定的行 5 、StartLine , + N 从startLine开始,向后的 N 行; Command: d : 删除符合条件的行; p : 显示符合条件的行; a

文本三剑客之 Sed

荒凉一梦 提交于 2020-02-12 03:14:44
sed : 用法: sed [option]... 'script' inputfile... 常用选项: -n:不输出模式空间内容到屏幕,即不自动打印 -e: 多点编辑 -f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本 -r: 支持使用扩展正则表达式 -i.bak: 备份文件并原处编辑 script:'地址命令 地址定界: (1) 不给地址:对全文进行处理 (2) 单地址: #: 指定的行,$:最后一行 /pattern/:被此处模式所能够匹配到的每一行 (3) 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步进 1~2 奇数行 2~2 偶数行 编辑命令: d: 删除模式空间匹配的行,并立即启用下一轮循环 p:打印当前模式空间内容,追加到默认输出之后 a [\]text:在指定行后面追加文本 支持使用\n实现多行追加 i [\]text:在行前面插入文本 c [\]text:替换行为单行或多行文本 w /path/somefile: 保存模式匹配的行至指定文件 r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后 =: 为模式空间中的行打印行号 !:模式空间中匹配行取反处理 替换 s///:查找替换,支持使用其它分隔符,s@@@,s### 替换标记: g: 行内全局替换 p: 显示替换成功的行

文本处理工具sed

若如初见. 提交于 2020-02-12 03:09:07
处理文本的工具sed 行编辑器 ,默认自带循环。 sed是一种流编辑器,它一次处理一行内容。 功能:主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等 sed工具 用法: sed [option]... 'script' inputfile... 常用选项: -n:不输出模式空间内容到屏幕,即不自动打印 -e: 多点编辑 -f: 从指定文件中读取编辑脚本 -r: 支持使用扩展正则表达式 -i.bak: 备份文件并原处编辑 地址定界: (1) 不给地址:对全文进行处理 (2) 单地址: #: 指定的行,$:最后一行 /pattern/:被此处模式所能够匹配到的每一行 (3) 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步进 1~2 奇数行 2~2 偶数行 编辑命令: d: 删除模式空间匹配的行,并立即启用下一轮循环 p:打印当前模式空间内容,追加到默认输出之 a:在指定行后面追加文本 支持使用\n实现多行追加 i:在行前面插入文本 c :替换行为单行或多行文本 w /path/somefile: 保存模式匹配的行至指定文件 r /path/somefile:读取指定文件的文本至模式空间中 匹配到的行后 =: 为模式空间中的行打印行号 !:模式空间中匹配行取反处理 s///:查找替换,支持使用其它分隔符,s@@@,s###

Linux的sed命令介绍

孤人 提交于 2020-02-12 02:34:54
sed:Stream EDitor,行编辑器: 用法:sed [option]... 'script' inputfile... 这里先展示/etc/fstab下的内容,后面会用到 常用选项: -n:不输出模式中的内容到屏幕 -e:多点编辑 -f:/PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本 -r:支持使用扩展正则表达式 -i:原处编辑 地址定界(在下面编辑命令栏有举例截图): 不给地址:对全文进行处理 单地址: #:指定的行 /pattern/:被此处模式所能够匹配到的每一行 地址范围: #,#:第几行到第几行 #,+#:第几行开始,一共几行 /pat1/,/pat2/:第一次出现的满足/pat1/的行到/pat2/行 #,/pat/:第几行到哪一行 编辑命令: d:删除。下面举例说明: 删除第6行,如下图,明显看出第六行消失了 删除第1到3行 删除UUID开头这一行 删除从第一行开始,一共5行 删除从# /etc这行到UUID开头这行 删除从第7行到UUID开头这行 p:显示模式空间中的内容: 例如,显示UUID开头这一行(这里会输出所有模式空间内容,然后再多出一行UUID的) 如果想只输出我们想要的,用到上面说的 -n a \text:在行后面追加文本,支持使用\n实现多行追加 例如在/dev这一行后面追加hello world !

管线工具sed和正则表达式

丶灬走出姿态 提交于 2020-02-12 00:33:59
查看文档/etc/passwd 文档并删除2,5行 [root@localhost yaotameng]# nl /etc/passwd |sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ...... [root@localhost yaotameng]# 只删除第二行 [root@localhost yaotameng]# nl /etc/passwd |sed '2d' 1 root:x:0:0:root:/root:/bin/bash 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin ........ [root

Sed在匹配行前后加入一行

眉间皱痕 提交于 2020-02-10 09:24:50
a 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置) i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将内容插入到匹配的行目标的上一行位置) 示例: #我要把文件的包含“chengyongxu.com”这个关键词的行前或行后加入一行,内容为“allow chengyongxu.cn” 1 #行前加 2 sed -i '/allow chengyongxu.com/i\allow chengyongxu.cn' the.conf.file 3 #行前后 4 sed -i '/allow chengyongxu.com/a\allow chengyongxu.cn' the.conf.file --------------------------------------------------- 1、删除指定行的上一行 sed -i -e :a -e '$!N;s/.*\n\(.*ServerName abc.com\)/\1/;ta' -e 'P;D' $file 2、删除指定字符串之间的内容 sed -i '/ServerName abc.com/,/\/VirtualHost/d' $filehttp://www.linuxso.com/shell/17542.html 来源:

6. 使用sed -i对文本字符串进行增删改查

ぐ巨炮叔叔 提交于 2020-02-10 08:56:04
sed是一个很好的文件处理工具,本身是一个管道命令,主要以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。 1. sed命令行格式 sed [选项] [命令] 1.1 选项 -n,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过 sed特殊处理的那一行(或者动作)才会被列出来。 -e,直接在命令列模式上进行sed的动作编辑。 -f,直接将sed的动作写在一个文件内。-f filename 则可以运行filename内的sed命令。 -r,sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -i,直接修改读取的文件内容,而不是输出到终端。 1.2 指定行数 [n1[,n2]]function n1, n2,不一定存在,一般代表“选择进行动作的行数”,如果我的动作需要在10到20行之间进行,则有’10,20命令’ 1.3 常用命令 a,新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行) c,取代,c的后面可以接字符串,这些字符串可以取代n1,n2 之间的行 d,删除,因为是删除,所以d后面通常不接任何东西 i,插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行) p,输出,即将某个选择的文件输出

Linux之sed用法

陌路散爱 提交于 2020-02-09 11:19:45
sed(stream editor)是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e∶直接在指令列模式上进行 sed 的动作编辑; -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作; -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法) -i∶直接修改读取的档案内容,而不是由萤幕输出。 常用命令: a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚; i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ s ∶取代

Linux命令使用小记--grep, sed

孤者浪人 提交于 2020-02-08 15:48:46
「TRIGGER」   项目【2020新冠疫情实时监控】中,数据保存出现的问题。 「EXPERIENCE」   一开始以为是数据保存端出现问题,以为是fscanf输入每行以 空格分隔 字段的文件导致的错误,并修改为以逗号分隔。不曾想修改程序后仍有错误数据保存发生,后经前辈提醒发现错误保存的那一条数据字段栏数匹配之前的数据,只是每个字段的内容有点微妙。   进一步找原因的时候发现在有问题的那一条数据产生时,会提示" 标准输入匹配到二进制文件 "。于是本该有4个字段的数据文件因为这个原因导致生成的数据文件就只有一个date +"%s"的unix时间。随后c程序中定义的结构也没有初始化,导致fscanf读入的字段只有一个,而后面有五个错误数据就这样产生了。 (还不够深入) 【图片描述:提示标准输入匹配到二进制文件】 【图片描述:错误数据产生原因】    问题:“标准输入匹配到二进制文件”这一句是谁提示的,具体哪个命令遇到什么情况会提示?   上网查阅后推测,类似提示语句的命令来源为: grep      想起自己的数据筛选中好像源数据确实有经过grep筛选       改进: grep -a "$head".    结果: 抱着终于搞定了的心态运行了一段时间.. 又出现了问题, 程序卡死了 。   想起昨天好像也遇到过,但自己那时候居然给无视了...      遂再次请教前辈