【问题标题】:how to remove the trailing word after a specific pattern is found using awk/sed unix command?如何在使用 awk/sed unix 命令找到特定模式后删除尾随词?
【发布时间】:2016-02-01 02:47:57
【问题描述】:

我正在尝试从找到的特定模式中删除尾随词。 示例如下:

file.txt
a/b/c/d/susan[123]
a/b/c/d/susan[456]
a/b/c/d/susan[890]
s/t/u/v/adam[12]
s/t/u/v/adam[50]

我希望文件的结果是:

a/b/c/d/susan
s/t/u/v/adam

我如何使用 awk/sed 命令来做到这一点? 谢谢。

【问题讨论】:

  • 我也想删除重复项。谢谢 mklement0
  • 实际上,我有 100 个不同位的信号示例,但是在这 100 个信号中,它们可以分成几组,
  • 请直接更新您的答案以阐明重复删除要求,并添加您稍后阐明的注释,以免使现有答案无效。关于按位分组:我建议你问一个 new 问题,并提供足够的细节。以后,请尽量提前说明您的所有要求。

标签: unix awk sed


【解决方案1】:

在这样的简单场景中,您只需要cut

cut -d '[' -f1 file.txt

这只是返回每行第一次出现[ 之前的子字符串。


如果您的示例输出遗漏重复项不仅仅是意外:如果您的输入记录是这样分组的并且您想清除重复项,只需通过管道发送到 uniq

cut -d '[' -f1 file.txt | uniq

【讨论】:

    【解决方案2】:

    sed 的另一个选项:

    sed 's/\(.[^[]*\).*/\1/g' file.txt
    

    这使用 sed 分组和反向引用。 \(...\) 捕获从行首到 [ 的任何内容(不包括它:.[^[]*)。然后它匹配剩余的字符,即。 [...]。由\(...\) 分隔的第一组然后可以用\1 反向引用。

    基本上,我将要保留的内容分组并在 sed 命令\1 的替换部分中引用它(意思是组号 1)。

    【讨论】:

    • 如何快速解释一下这是如何工作的?此答案被自动标记为“低质量”,实际上并非如此 - 但仅代码的答案往往会被标记。
    • 谢谢。我不知道。
    • 我建议将正则表达式锚定在字符串的开头(为了清楚起见)并删除不必要的g:sed 's/^\(.[^[]*\).*/\1/' file.txt
    【解决方案3】:

    您也可以使用 grep 提取左括号之前的部分,然后将结果通过管道传递给 uniq:

    grep -Eo '^[^[]+' file | uniq
    

    我假设 file 已排序,因为您在演示数据中显示了这一点。如果不是这种情况,您需要在将输出传递给 uniq 之前对其进行排序:

    grep -Eo '^[^[]+' file | sort | uniq
    

    【讨论】:

      【解决方案4】:

      mklement0 的答案可能是最好的,但如果你想用 awk 或 sed 来做。

      awk:awk -F'[' '{print $1}' file.txt

      sed:sed 's/\[[0-9]*\]$//' file.txt

      【讨论】:

      • ++;这两个命令都可以很好地处理示例输入数据,但值得注意的是,sed 命令不仅使用了awk 命令的补充 方法 - 它删除 一切从第一个 [ 开始,但也更具限制性,仅匹配 [ 之后的(零个或多个)digits,并要求结束 ]
      • 感谢您的补充。
      【解决方案5】:

      还有一个删除重复项的建议。

      awk -F'[[]' '/12/{print $1}' file
      a/b/c/d/susan
      s/t/u/v/adam
      

      【讨论】:

      • 老实说,根据重复项是否包含文字 12 来检测重复项是一个糟糕的主意 - 除非您必须处理的所有输入恰好是问题中的样本数据。
      猜你喜欢
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2017-12-28
      • 2021-12-22
      • 2017-01-04
      • 1970-01-01
      • 2011-05-25
      • 2017-02-14
      相关资源
      最近更新 更多