如何替换特定字段中的特殊字符?
输入
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
,替换 strings
,并返回替换次数。如果
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