bash - 如何删除unix中特定多个字段中的括号

标签 bash shell unix awk

我需要从一行中的特定字段(第 2、4、5、7 字段)中删除括号“{”,我尝试使用以下命令但没有帮助

文件中的数据

a,{1},hello{hi}hello,{+2A},{3},un{i}x,{4}

期望的输出

a,1,hello{hi}hello,+2A,3,un{i}x,4

尝试过 unix 命令

awk -v FS="," -v OFS="," 'BEGIN { split("2,4,5,7", F); } { for(N in F) sub("\\(\\)","", $(F[N])) }1' testfile | sed 's/,,/,/g'

最佳答案

你可以使用这个awk:

s='a,{1},hello{hi}hello,{2},{3},un{i}x,{4}'

awk -v k='2,4,5,7' 'function strip(n){gsub(/[{}]/, "", $n)}
BEGIN{FS=OFS=","; n=split(k, a, /,/)}{for (i=1; i<=n; i++) strip(a[i])} 1' <<< "$s"

输出:

a,1,hello{hi}hello,+2 A,3,un{i}x,4

关于bash - 如何删除unix中特定多个字段中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938894/

相关文章:

bash - 在bash中将文件转换为二维数组

C 中命名管道的消费者 - 生产者问题

csv - BigQuery 加载较大的 CSV 文件失败

bash - bash 中变量不等式的正确语法是什么?

linux - 捕获错误消息并创建日记条目

shell - 如何在shell内运行fish文件

python - 将二进制文件解释为 ASCII

unix - unix 域套接字是否有 TIME_WAIT 状态?

regex - 如何grep包含标点符号的字符串?

bash - 终端:使用 sips 中的图像信息来重命名文件