【问题标题】:AWK or SED to remove pattern from every line while using grepAWK 或 SED 在使用 grep 时从每一行中删除模式
【发布时间】:2014-08-19 02:55:56
【问题描述】:

我有 grep 2 列,假设 col1 和 col2。在 col2 中,我想删除每行中出现的模式。为此如何使用 awk/sed?

假设ps -eaf | grep b 会产生以下输出:

col1 col2       col3
1    a/b/rac     123
2    a/b/rac1    456
3    a/b/rac3    789

我希望输出存储在这样的文件中:

1 rac
2 rac1
3 rac3

【问题讨论】:

  • ps -eaf 不会导致这样的输出
  • 请发布一些与您的真实数据相似的示例数据。模糊的问题会导致模糊的答案,从而导致模糊的问题。我是否已经含糊其辞了?

标签: unix awk sed


【解决方案1】:

模糊地说,这可能会做你想要的:

$ awk 'sub(/.*b\//,"",$2){print $1, $2}' file 
1 rac
2 rac1
3 rac3

假设文件包含:

col1 col2       col3
1    a/b/rac     123
2    a/b/rac1    456
3    a/b/rac3    789

【讨论】:

  • 这确实让我崩溃了。虽然这是一种美。像这样使用sub 消除了对/b/ 模式搜索的需要。太棒了!
  • 您可以将其添加到即将出版的 awk 书籍的“Vague”部分下:-)。
【解决方案2】:

您需要将输出通过管道传输到

| awk '{sub(/^.*\//, "", $2); print $1, $2}'

awk 程序中的第一个命令将第二个字段的内容更改为仅包含最后一个 / 字符之后的内容,这似乎是您想要的。第二个命令打印前两个字段。

【讨论】:

    猜你喜欢
    • 2023-01-26
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多