【问题标题】:awk remove substring using regexawk 使用正则表达式删除子字符串
【发布时间】:2015-10-12 19:15:24
【问题描述】:

我有一个管道分隔文件,如下所示:

34ab1 | aaa bbb   ccc   fff  vf | 2015-01-01
35ab1 | aaa bbb   ccc dddefd ddff  ssss   fff  vi | 2015-01-01

我想替换所有以 bbb 开头并以 fff 结尾的内容。

我用过这个:

BEGIN {
    FS = OFS = "|"
}
{
   sub(/[0-9].*[0-9]/, "", $2); sub(/bbb.*fff/, "", $2);
   print
}

数字的正则表达式部分有效,但正则表达式的第二部分没有。

我想要的输出:

34ab1 | aaa   vf | 2015-01-01
35ab1 | aaa   vi | 2015-01-01

【问题讨论】:

  • 但是您的第二列中没有数字。
  • 数字部分是我用于其他行的部分。它工作了,所以现在我添加了另一个sub()

标签: regex bash awk sh


【解决方案1】:

对两者使用一个 gsub 函数。

BEGIN {
    FS = OFS = "|"
}
{
gsub(/[0-9].*[0-9]|bbb.*fff/, "", $2);
print
}

【讨论】:

  • 如果我想连续删除数字和子字符串,gsub 中的| 是否只替换其中一个或两个,因为| 表示or
  • 不,gsub 替换一行中的所有匹配项,而不仅仅是第一个。
  • 如果 bbb 或 fff 是汉字,这会起作用吗?我试过了,但效果不太好
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2013-04-13
  • 2014-11-07
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多