替换特定字段中的特殊字符

替换特定字段中的特殊字符

如何替换特定字段中的特殊字符?

输入

xxxx,11/2019,xxx

输出

xxxx,11,2019,xxx

正如你所看到的,我只想用/in,替换$2

如何实现这一目标?

答案1

awk -F, -v OFS=, '{gsub(/\//,",",$2); print}'

这使用 的awk函数gsub()在字段 2 上进行全局正则表达式搜索和替换。

如果您只想替换/$2 中第一次出现的 ,请使用sub()而不是gsub()

注意:默认的输出字段分隔符OFS是空格。您需要将其设置为,(与输入字段分隔符相同FS),否则print将输出所有以空格分隔的字段。

来自 GNU 的手册页awk

gsub(r, s [, t])

r对于string 中 与正则表达式匹配的每个子字符串t,替换 string s,并返回替换次数。

如果t未提供,则使用 $0。

替换文本中的&会替换为实际匹配的文本。

用于\&获取文字 &。 (必须输入为\\&;请参阅GAWK:有效的 AWK 编程更全面地讨论、 和 的替换文本中 & 和反斜杠的规则sub()。)gsub()gensub()

答案2

给出的命令之前的答案可以简单得多。经过测试并且工作正常。

由于需要在第二列进行更改,因此我在第二列添加了相同的内容并进行了测试。

echo "echo "xxxx,11/2019,xxx xxxx,11/2019,xxx" " |
awk '{print gsub("/",",",$2);print $0}'  

输出:

xxxx,11/2019,xxx xxxx,11,2019,xxx

相关内容