bash - 如何使用 sed 或 awk 在模式后删除某些字符?
问题描述
我有一个包含如下格式的行数的文本文件
001_A.wav;112.680;115.211;;;Ja. Hello; Hi:
我的目标是清理之后的任何东西;;;
。删除以下字符的含义,;()~?
我知道我可以做类似的事情sed 's/[,.;()~?,]//g'
。但是,如果我这样做,它会给我类似的东西
001_Awav112.680115211Ja Hello Hi
但是我只想在之后删除这些字符,;;;
这样我会得到
001_A.wav;112.680;115.211;;;Ja Hello Hi
我怎样才能完成这项任务?
解决方案
第一个解决方案:您能否尝试在 GNU 中使用显示的示例进行跟踪、编写和测试awk
(假设;;;
在一行中发生一次)。
awk '
match($0,/.*;;;/){
laterPart=substr($0,RSTART+RLENGTH)
gsub(/[,.:;()~?]/,"",laterPart)
print substr($0,RSTART,RLENGTH) laterPart
}' Input_file
说明:为上述添加详细说明。
awk ' ##Starting awk program from here.
match($0,/.*;;;/){ ##Using atch function to match everything till ;;; here.
laterPart=substr($0,RSTART+RLENGTH) ##Creating variable laterPart which has rest of the line apart from matched regex part above.
gsub(/[,.:;()~?]/,"",laterPart) ##Globally substituting ,.:;()~? with NULL in laterPart variable.
print substr($0,RSTART,RLENGTH) laterPart ##Printing sub string of matched regex and laterPart var here.
}' Input_file ##Mentioning Input_file name here.
第二种解决方案:如果您多次出现;;;
in 行并且您想替换所有字段中的字符,请在第一次出现;;;
之后尝试以下操作。
awk 'BEGIN{FS=OFS=";;;"} {for(i=2;i<=NF;i++){gsub(/[,.:;()~?,]/,"",$i)}} 1' Input_file
推荐阅读
- python - 使用python在线从TXT文件中读取1行
- javascript - 发布 api 调用后传播不会停止
- spring-batch - Spring Batch Job 没有进入 STOPPED 状态,应用程序永远不会退出
- node.js - Express JS - 网络连接丢失
- json - SQL SERVER 将 Json 导出到文件
- python - 我在 python 中的代码给出了类型错误:object() 在传递参数时不接受任何参数。我应该怎么办?
- swift - 如何创建子类对象?
- d3.js - 使用 D3JS Axis + viewbox 时如何适当地缩放我的轴?
- java - 处理音频文件的元数据时,意图 Uri 数据消失
- php - 我可以从 php 库中获取 Google 语音到文本转录为 JSON 的完整结果吗?