Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 是否有一种方法可以从文本文件中删除斜杠后的数据,如下图所示?_Linux_Bash_Unix_Awk_Sed - Fatal编程技术网

Linux 是否有一种方法可以从文本文件中删除斜杠后的数据,如下图所示?

Linux 是否有一种方法可以从文本文件中删除斜杠后的数据,如下图所示?,linux,bash,unix,awk,sed,Linux,Bash,Unix,Awk,Sed,我正在尝试使用sed和awk从文本文件中删除电话号码,直到下一个逗号,但没有任何运气 这个 2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/7408058445,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934 2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/9161455644,2020-04-13 17:09:

我正在尝试使用sed和awk从文本文件中删除电话号码,直到下一个逗号,但没有任何运气

这个

2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/7408058445,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/9161455644,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/7672748033,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/9820276621?noOfRecords=1&blahlahAccountNo,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796
需要像这样

2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796
请注意,我需要从电话号码到下一个逗号的数据,就像最后一行一样

任何帮助都将不胜感激


感谢您提供的解决方案,除了下面所示的解决方案之外,它们在所有线路上都有效。您能帮忙吗

/dcd/manual/v2/profile/9841001122?字段=计费安排,计费账号,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825

运行命令后,它将给出以下输出

/dcd/manual/v2/profile,账单账号,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825

但是预期的输出如下所示,请您帮助。我卡住了

/dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825可能是这样

cat data.txt \
  | sed -r 's/(.*)\/[[:digit:]]+,(.*)/\1,\2/g' \
  | sed -r 's/(.*)\/[[:digit:]]+\?[^,]*,(.*)/\1,\2/g'
第二个替换是因为我注意到示例中的最后一行与其他行不同


如果您的完整数据集中有其他特殊情况,您需要以类似的方式处理它们

您可以在一行中这样做,如下所示

awk 'BEGIN{FS=OFS=","} {sub(/[0-9]{10}.*/,"",$2)} 1'  Input_file
编辑:根据@kvantour注释处理角落案例尝试以下操作

awk '
{
  val=""
  num=split($2,array,"/")
  sub(/[0-9]{10}.*,/,",",array[num])
  for(i=1;i<=num;i++){
    val=(val?val"/":"")array[i]
  }
  $2=val
}
1
'  Input_file
awk'
{
val=“”
num=split($2,数组“/”)
sub(/[0-9]{10}.*,/,“,”,数组[num])

对于(i=1;我很高兴你提到你尝试了很少的东西。因此,我们鼓励用户增加他们的努力(正确或错误并不重要,因为我们都在这里学习),请编辑您的帖子并在其中添加示例,然后让我们知道。哦,我的天啊,它成功了!!我已经为此奋斗了两天。您是个天才。非常感谢!您可以将命令简化为
sed-E的|/[0-9]+[^,]*,|/,|'
sed-E的|/[0-9]{10}[^,]*,|/,|
(条件更严格)感谢您提供的解决方案,它们适用于除下面所示之外的所有行。您可以帮助/dcd/manual/v2/profile/9841001122吗?fields=billingArrangement,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825运行命令后,它给出的输出是/dcd/manual/v2/profile,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825但是预期的输出如下,你能帮忙吗。我被卡住了/dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825好吧,这有点难,因为COMA正在拧csv结构,但这是可能的。给我一点时间。顺便问一下,这是整条线吗没有日期作为第一部分?请尝试此
cat data.txt | sed-r的/(.*)\/[:digit:]+.*([^,]+),([^,]+)/\ 1,2,3 /g′/代码>,但您需要学习正则表达式,因为您将经常遇到这些问题。这一个将处理所有的情况BTW。这也是有效的,谢谢您的快速切换!这是不安全的,它可能删除目录结构中间的数字。<代码>开始F{OFS=“,”}{Sub(/[[] /[*$],“/”,2美元)}。1'
@kvantour,当然谢谢你,现在尝试在编辑代码中修复它。你好,Ravinder,你的解决方案适用于所有行,除了下面的行/dcd/manual/v2/profile/9841001122?fields=billingArrangement,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59:59.825运行它给出的命令后是下面的输出t/dcd/manual/v2/profile,billingAccountNo,faId,2020-04-16 09:59:59.7402020-04-16 09:59:59.825但预期输出如下,请您帮助。我被卡住了/dcd/manual/v2/profile,2020-04-16 09:59:59.7402020-04-16 09:59:59.825