我有一个正在处理的文件并且卡住格式如下: “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/'
这似乎没有任何影响,对于完成这项工作的特定工具并不是很挑剔,我只需要完成它。有人有什么想法吗?
答案 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地址