sed处理文本

日期:2017-8-15

昨天正好接触了一个sed处理文本的问题,顺便就把这个思路和处理过程记录一下。linux中的sed和awk很强大,对于只能说了解的我来说只能通过不断的学习才能更加熟练,下面实例说明。

1.

原文本 : 文本名:file001

aaa,"bbbb,cccc",ddd

甲,"-- , 冰冰冰",大,小

甲,"-- , ttt",大

e,"ffff,ggg",h

需实现的文本:

aaa,bbbbcccc,ddd

甲,--冰冰冰,大,小

甲,--ttt,大

e,ffffggg,h

从上面两个文本可以看出来是要去掉"" 并且双引号中的逗号也需要去掉,同时需要拼接逗号两边的内容。

思路:1:用sed去掉双引号

sed ‘s/"//g‘ file001
再用sed去掉第二个逗号
sed ‘s/,//2‘ file001
所以有:
sed -e ‘s/"//g‘ -e ‘s/,//2‘ file001

最初可以解决上面的要求,但是如果引号所在的域不是都在同一个域内,不在第二个域内就会有问题了。ps:域可以说是列,按照逗号分隔的列。

2.原文本 file002

aaa,"bbbb,cccc",ddd

甲,"## , 冰冰冰",大,小

甲,"##, ttt",大

e,"ffff,ggg",h

bbb,xxx,"sssc,xxx",fff

此时再用上面的解决方法是有问题的,所以另开思路:

思路2:把""中的格式看成"a,b",我们要实现的结果是取出ab 删掉其他东西。此时需要用到 \1\2

方法:sed -r ‘/".+,.+"/s#"([^ ]+) *, *([^ ]+)"#\1\2#‘ file002

1.-r, --regexp-extended  扩展正则

use extended regular  expressions  in  the script.

2. /".+,.+"/ 匹配"a,b" 这个模式

3.([^ ]+)  [^ ]+ 表示非空,^在[]里面表示取反,在外面表示开头,+表示多个 用() 是为了后面的\1 \2   可以存储9个从1-9

4.* 表示0个或者多个

下面是可以其他实现的方法:

  1. sed  ‘s/[ \t]//g‘ xxx |sed -r ‘s#"([^ ]+),([^ ]+)"#\1\2#‘ file002
  2. sed -r ‘s#"([^ ]+) *, *([^ ]+)"#\1\2#‘

相关sed:

sed基本命令

sed英文版

时间: 2025-01-08 09:49:28

sed处理文本的相关文章

Sed替换文本中的指定内容

可以这样做:方法1:sed -i 's/被替换的内容/要替换成的内容/' file 方法2:sed 's/被替换的内容/要替换成的内容/g' file > file.outmv file.out file 这里注意:不能这样做:sed 's/被替换的内容/要替换成的内容/g' file > file这样只会清空源文件. Sed替换文本中的指定内容,布布扣,bubuko.com

sed删除文本第一个匹配行

源文本如下,要求删除第一个为happy-123456的行. ----------------------------- aaaaaaa happy-123456 bbbbbb asdasawe happy-123456 dsafsdfsd sagasdfasd happy-123456 ------------------------------ 目标文本: ----------------------------- aaaaaaa bbbbbb asdasawe happy-123456 ds

流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同.除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的. 这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中.sed 在一个文件(或文件集)中非交互式.并且不加询问地接收一系列的命令并执行它们.因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追加等操作. 流编辑器非常适合于执行重复的编辑,这种重复编辑如果由人工完成将花费大量的时间. 其参数可能

正则表达式 grep与sed的文本处理

作业一:整理正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.它由一些普通字符和一些元字符(metacharacters)组成.普通字符包括大小写的字母和数字,而元字符则具有特殊的含义. 主要常用的有: 元字符 功能 元字符 功能 ^ 匹配字符串的开始位置 $ 匹配字符串的结束位置 . 匹配任意单个字符 * 匹配子表达式0次或n次 + 匹

sed替换文本

需要替换的行为: monitor.url=http://192.168.25.100:8443/rest 查询资料得知,报错是因为替换的字符串包含有分隔符/ 所以这行改一下分隔符就可以解决问题了  (这里的分隔符随自己定义 例如:sed -i "s#$url#$1#g" datasource.properties  这三个分隔符要统一就可以了) 改成感叹号!或者|  等其他来分割 sed -i "s!$url!$1!g" datasource.properties

Linux 的文本处理工具---sed

                sed 处理文本工具 一.概述 Stream EDitor,行编辑器 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等  sed 是一种非

文本处理三剑客之sed

文本处理三剑客之sed sed概述 sed使用示例 sed的高级应用 sed概述 sed, 作为文本三剑客之一,其定位就是一个编辑器, 而且sed是一个流式编辑器(stream editor),其主要功能是过滤和转换文本. sed - stream editor for filtering and transforming text 作为一个强大的文本处理功能,sed 自然能够配合正则表达式,另外,所谓流编辑器,sed 是逐行地读取文本,在文本行中应用指定的命令,且默认输出到stdout; se

文本处理工具sed及awk的用法

sed: stream editor, 流编辑器: sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像.sed按顺序逐行读取文件.然后,它执行为该行指定的所有操作,并在完成请求的修改之后的内容显示出来,也可以存放到文件中.完成了一行上的所有操作之后,它读取文件的下一行,然后重复该过程直到它完成该文件.在这里要注意一点,源文件(默认地)保持不被修改.sed默认读取整个文件并对其中的每一行进行修改.说白了就是一行一行的操作.我用sed主要就是用里面的替换功能,真

使用sed和awk进行文本处理

Shell这种脚本语言特点是,结果松散,场景复杂,针对于一些参数都有特殊意义.针对于大部分工程师而言,使用中的情况是你可能会经常忘记参数或其意义,使你不得不查阅man或网上寻求帮助.此篇文档作用就是在自己忘记个别参数的情况下有个一目了然的答案. 一.sed进行文本处理 Linux的sed工具是linux的流编辑器,用于处理文本文件,配合正则表达式使用,功能非常强大.以下是一些sed使用示例和解释: # sed 's/oracle/CHAVIN/' textfile 替换文本文件textfile中