【问题标题】:Grep last N characters of each line in a file [closed]grep文件中每一行的最后N个字符[关闭]
【发布时间】:2014-12-25 09:03:27
【问题描述】:

我有一个包含数百万行的文件。每行都以“XXX:某个值”的格式结尾。我只想从每行中提取这个单词“XXX:某个值”并将其放在单独的file.如何使用 grep 命令实现这一点?

PS:“some value”可以是任意字符串

【问题讨论】:

  • 除了作为一种智力练习之外,你能否给出一个很好的理由为什么不使用 perl 或 python 来完成这样的任务?例如。 perl -ne '/.*:(.*)$/ and print "$1\n"'.
  • 你能举个例子吗?

标签: unix awk sed grep tail


【解决方案1】:

使用awk获取每行的最后n个字符:

cat file
asdf
asdfg
asdfgh

awk -vn=2 '{print substr($0,length($0)-n+1)}'
df
fg
gh

或者你想在XXX之后获取数据,然后做:

echo "here is my line XXX:22" | awk -F"XXX:" '{print $2}'
22

【讨论】:

  • awk -vn=2 '{print substr($0,length($0)-n+1)}'中的文件名在哪里?
  • 非常感谢!
【解决方案2】:

使用-o 标志:

grep -o 'XXX:.*' <input >output

【讨论】:

  • "Some value" 可以是任何字符串。
  • @Karthik207 很好,因为.* 将匹配任何字符串。您确定没有将此回复与other one 混淆吗?
【解决方案3】:

你可以像下面这样使用 grep:

grep -ow 'XXX:some value' myfile.txt > patternMatched.txt

【讨论】:

  • 我猜some value 可以是任何数字/信息,而不仅仅是文本some value
  • 我不确定,tbh 还没有在 OP 的帖子中看到这一点,但如果是这种情况,OP 也可以使用正则表达式。无论如何,我认为以上内容可以根据 OP 的输入进行完全匹配。
  • "某个值可以是任意字符串"
  • @Karthik207 应该仍然有效。
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 2015-03-28
相关资源
最近更新 更多