如何在特定字符处剪线

如何在特定字符处剪线

我的文件中有一堆看起来像这样的行

word_word_word 0 word_word
word_word_word 1 wordwordword
word word word word 0 word word word word
word 2 word_word_word word word
word word_word 3 word

我想捕获该文件并获得如下所示的输出:

word_word_word 0
word_word_word 1
etc...

如何剪切/awk/或任何行并显示从第一个字节到第一个个位数的所有内容?

谢谢!

答案1

使用 grep:

grep -oP '^.*?\s[0-9](\s|$)' file

-o选项告诉 grep 仅打印匹配项。

该模式正在寻找:

  • 行的开头^
  • 接下来是任何重复的内容(非贪婪).*?
  • 后面跟着空格\s
  • 后跟 0 到 9 之间的单个数字[0-9]
  • 最后,该单个数字后面必须跟有空格或行尾(\s|$)

答案2

使用 awk 进行 for 循环:

awk '{
  for(i=1;i<=NF;i++){
    if($i ~ /[0-9]/){
      printf "%s\n",$i;
      break
    }
    printf "%s ",$i
  }
}' file

会得到你想要的。

答案3

如果这(在每个 UNIX 机器上的任何 shell 中使用任何 sed)不是您所需要的,那么编辑您的问题以提供更好的示例,包括这不适用于的行:

$ sed 's/\( [0-9]\) .*/\1/' file
word_word_word 0
word_word_word 1
word word word word 0
word 2
word word_word 3

相关内容