regex - awk 仅使用正则表达式编辑 1 列

标签 regex awk

我有一个包含 3 列的 CSV 文件:

id,text,date
123,hi 你好吗?,2016-01-01
246,this is stackoverflow 我需要帮忙,2016-02-01

我只想编辑第 2 列,我只删除英文字符并保留中文字符。其他列保持不变。

我想要的输出:
id,text,date
123,你好吗?,2016-01-01
246,我需要帮忙,2016-02-01

有没有比这更好的方法来做到这一点:
cat myfile.csv|cut -d, -f2|sed 's/[a-zA-Z]*//g' > tmp.csv
paste -d, myfile.csv tmp.csv|awk -F, '{OFS=",";print $1,$7,$3}' >tmp2.csv

最佳答案

awk -F, 'BEGIN {OFS=","} { if (NR>1) {gsub(/[\x00-\x7F]/, "", $2)}; print }' test.txt
  • NR>1 : 不要在第一行操作
  • gsub(/[\x00-\x7F]/, "", $2) : 去掉第 2 列中的 ascii 字符。doc
  • 关于regex - awk 仅使用正则表达式编辑 1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074171/

    相关文章:

    java - Jenkins 控制台部分 : What Java regex will trigger on string ERROR but not on string %%ERRORLEVEL%%?

    javascript - 匹配以下数组中的双引号

    linux - 使用 awk 计算多列中的字数

    bash - unix awk 列等于一个变量

    javascript - 在 url 的路径部分之后插入 ".js"的最干净的方法?

    regex - 在由 "."分隔的字符上通过正则表达式拆分数据框列

    regex - VIM:在光标位置添加空格

    linux - 仅删除逗号分隔文件中引号之间的逗号

    awk - 当 awk 脚本的大括号外有代码时,这意味着什么?

    c# - 使用 AWK 或 SED 复制行并最终创建方法包装器