删除两个字符串

时间:2017-02-17 20:29:05

标签: sed

我有一个正在处理的文件并且卡住格式如下:     “HostRecord”,“SOMEFILE”,“InsideView”,“legacy.name.com”,“1.2.3.4”,“1.2.3.5”,“一些评论”,“”

我需要删除IP地址之间的“”,但保留,所以最后我会让输出看起来像这样:     “HostRecord”,“SOMEFILE”,“InsideView”,“legacy.name.com”,“1.2.3.4,1.2.3.5”,“一些评论”,“”

我认为我只是使用sed并尝试过多种方法。我最新的是这样的:

sed -e 's/\(.*[0-9]\{1,3\}=1&\)\"\(,=2&\)\"\([0-9]\{1,3\}=3&\)/\1\2\3/'

这似乎没有任何影响,对于完成这项工作的特定工具并不是很挑剔,我只需要完成它。有人有什么想法吗?

3 个答案:

答案 0 :(得分:0)

为什么不使用具有真正CSV处理功能的东西?假设你收集IP地址,直到你得到的东西看起来不像IP地址,这应该有效:

ruby -rcsv -e '
  cout = CSV.new $stdout, force_quotes: true
  CSV.new(ARGF).each do |row|
    out_row = row.shift(4)
    ips = row.shift
    while row[0] =~ /^\d+\.\d+\.\d+\.\d+$/ 
      ips += ",#{row.shift}"
    end
    cout << out_row + [ ips ] + row
  end' infile.csv >outfile.csv

答案 1 :(得分:0)

使用替换“s”命令中可用的标志(如常见的g,p或d标志),我们只能替换第N次出现。所以,例如:

<file sed -e 's/"//11' -e 's/"//10'

将删除第10个双引号'“'。

sed 's|\([0-9]\)","\([0-9]\)|\1,\2|g'

将删除第11个引号,然后删除每行的第10个引号。

[0-9]

这会将","周围的每个数字\1保存为两组。然后,我们可以将模式替换为第一组,,后跟逗号\2,然后是第二组Module build failed: SyntaxError: C:/workspace/src/app.jsx: Unexpected token (115:36) 113 | <h6>Your rollover to a IRA is in progress...</h6> 114 | { > 115 | if(this.props.sportsInfo.fundingDetailId === null || this.props.sportsInfo.fundingDetailId === undefined || this.props.sportsInfo.fundingDetailId === '') | ^ 116 | { 117 | App.rollOverNoContent(); 118 | } 。我们添加“g”标志,使得替换命令适用于该行上发现的每一个事件。

答案 2 :(得分:0)

假设我们有一个文件test_sed,其中包含以下行:

"HostRecord","SOMEFILE","InsideView","legacy.name.com","1.2.3.4","1.2.3.5","some comment",""
"HostRecord","SOMEFILE","InsideView","legacy.name.com","1.2.3.4","1.2.3.5","10.10.10.10","192.168.1.12","some comment",""

通过管道序列(输出重定向)使用两个sed命令:

cat test_sed | sed -re 's#"(([0-9]{1,3}\.){3}[0-9]{1,3})","(([0-9]{1,3}\.){3}[0-9]{1,3})"#"\1,\3"#gp;' 
    | sed -rn 's#,(([0-9]{1,3}\.){3}[0-9]{1,3})","(([0-9]{1,3}\.){3}[0-9]{1,3}),#,\1,\3,#gp;'

输出:

"HostRecord","SOMEFILE","InsideView","legacy.name.com","1.2.3.4,1.2.3.5,10.10.10.10,192.168.1.12","some comment",""
"HostRecord","SOMEFILE","InsideView","legacy.name.com","1.2.3.4,1.2.3.5,10.10.10.10,192.168.1.12","some comment",""

([0-9]{1,3}\.){3}[0-9]{1,3})代表IP地址