【问题标题】:sed delete trailing pattern of digitssed 删除数字的尾随模式
【发布时间】:2015-11-30 17:26:14
【问题描述】:

我有一个 .txt 文件,其中最后一列在“Baker 2-13”或“Charlie 03-144”等文本之后包含一个数字模式。我想删除行尾的所有数字,只剩下贝克和查理。我尝试在 awk 语句的末尾使用 sed 命令管道,但没有成功。

sed -E 's/[0-9]{1,2}"-"[0-9]{1,3}$//'

我已经尝试在我的 sed 命令中添加空格和回车,但仍然没有成功。

sed -E 's/[0-9]{1,2}"-"[0-9]{1,3}\s\r$//'

我也试过这个,但它只在我回显文本样本时有效,它不适用于我的 .txt 文件的每一行

echo "CHARLIE 02-157" | sed -E 's/[0-9]*([0-9])+\-[0-9]*([0-9])+$//'

有什么想法吗?

【问题讨论】:

  • 只有两列吗?您要替换原始文件还是将结果转储到 STDOUT?
  • 这里是完整的声明:awk -F\| '$7 ~ /-OF|-AR/ { print $7, $3, $4, $5 }' qry_log.txt | sort -u | sed -E 's/[0-9]{1,2}-[0-9]{1,3}$//' 所以四列,它可以替换原始文件或输出到新文件。无论哪种方式都无所谓。
  • 从四列中,您只想过滤掉名称。嗯?
  • 您的输入文本文件是否可能在 MS Windows 中生成或修改?如果是这样,您可能必须将其转换为使用 unix 样式的行尾。请将od -c inputfile.txt | headcat -vet inputfile.txt | head 的输出添加到您的问题中。

标签: regex bash sed


【解决方案1】:

这应该可行:

sed -i.bak -E 's/[0-9]{1,2}-[0-9]{1,3}$//' file

cat file
Baker
Charlie

您不需要在模式中引用连字符。

【讨论】:

  • 忘了提到我在 Mac 上使用 Bash。我尝试了您的解决方案并收到以下错误:sed: -i may not be used with stdin
  • 我也在 Mac 上,这在那里工作。很可能您没有将它与文件一起使用并使用管道。在这种情况下,只需使用sed -E 's/[0-9]{1,2}-[0-9]{1,3}$//'
  • 是的,我在 awk 语句的末尾使用了 sed 语句。我还是没有运气。
  • awk -F\| '$7 ~ /-OF|-AR/ { print $7, $3, $4, $5 }' qry_log.txt | sort -u | sed -E 's/[0-9]{1,2}-[0-9]{1,3}$//'
  • 我的意思是 awk -F\| '$7 ~ /-OF|-AR/ { print $7, $3, $4, $5 }' qry_log.txt | sort -u | cat -vte 的输出(并在 cmets 中提供有问题的)
【解决方案2】:

简单的sed解决方案

sed 's/[- 0-9]*$//'  

这将删除尾随的破折号、空格和数字!

【讨论】:

  • 就可以了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多