Jir*_*waf 3 bash shell awk sed
我有一个包含行数的文本文件,格式如下
001_A.wav;112.680;115.211;;;Ja. Hello; Hi:
Run Code Online (Sandbox Code Playgroud)
我的目标是清理之后的任何东西;;;。删除以下字符的意思,;()~?
我知道我可以做类似的事情sed 's/[,.;()~?,]//g'。但是,如果我这样做,它会给我类似的东西
001_Awav112.680115211Ja Hello Hi
Run Code Online (Sandbox Code Playgroud)
但是我只想在之后删除这些字符,;;;所以我会得到
001_A.wav;112.680;115.211;;;Ja Hello Hi
Run Code Online (Sandbox Code Playgroud)
我怎样才能完成这个任务?
第一个解决方案:您能否尝试在 GNU 中使用所示示例进行以下、编写和测试awk(假设;;;在一行中发生一次)。
awk '
match($0,/.*;;;/){
laterPart=substr($0,RSTART+RLENGTH)
gsub(/[,.:;()~?]/,"",laterPart)
print substr($0,RSTART,RLENGTH) laterPart
}' Input_file
Run Code Online (Sandbox Code Playgroud)
说明:为以上添加详细说明。
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.
Run Code Online (Sandbox Code Playgroud)
第二种解决方案:如果您多次出现;;;in 行并且您想替换所有字段中的字符,请在第一次出现;;;后尝试以下操作。
awk 'BEGIN{FS=OFS=";;;"} {for(i=2;i<=NF;i++){gsub(/[,.:;()~?,]/,"",$i)}} 1' Input_file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |