linux - 从文件的第二列中删除特殊字符

标签 linux bash awk cat tr

我有一个文件s.csv

a,b+ -.,c 
aa,bb ().,c._c

我想删除第二列中的所有特殊字符(文件以逗号分隔)

cat s.csv | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'

上面的代码还删除了第三列中的特殊字符。

awk -F, '{print $2}' s.csv | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'

此代码仅打印第二列。

知道如何从第二列中删除特殊字符并定价所有

所需的输出应该是

a,b,c 
aa,bb,c._c 

最佳答案

删除全部(从第二个字段)

  1. 非大写字母的字符[^A-Z
  2. 或小写字母a-z
  3. 或数字0-9]
  4. 来自第二个字段$2
  5. 字段以“,”分隔-F ','
  6. 在输出中保留分隔符OFS=FS

$ awk -F ',' 'BEGIN{OFS=FS}{gsub(/[^A-Za-z0-9]/,"",$2); print}' s.csv


# test
$ awk -F ',' 'BEGIN{OFS=FS}{gsub(/[^A-Za-z0-9]/,"",$2); print}' <<<'aa,bb ().,c._c'
aa,bb,c._c

正如@Léa Gris 下面提到的

Don't forget to set the locale to C or [^A-Za-z0-9] is gonna be interpreted unexpectedly in non-western European alphabets. Prepend awk invocation with LC_ALL=C

关于linux - 从文件的第二列中删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72389858/

相关文章:

c - Ubuntu 上的套接字(不允许操作)

ios - 从 iPhone 控制笔记本电脑上的 mpd/ncmpcpp

linux - 无法写入/dev/* 文件

file - 是否可以合并 bash 和 awk 脚本文件?

linux - 如何在 Linux 中使用 awk 创建字典?

javascript - V8 JavaScript 引擎可以调用外部库或函数吗?

linux - 64位Linux专有软件复制/IP保护

字符串连接在 Bash cygwin 中不起作用

linux - Bash 脚本在文件名中生成项目符号

perl - grep regex 到 perl 或 awk