我的文件中有一堆看起来像这样的行
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