在第一个空格后使用 sed/awk 删除任何内容

Ran*_*han 29 grep sed awk

aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09
Run Code Online (Sandbox Code Playgroud)

使用 sed/awk/replace,在上面的文本中,我想删除每行第一个空格之后的任何内容。例如,输出将是:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

Kev*_*vin 44

sed

sed 's/\s.*$//'
Run Code Online (Sandbox Code Playgroud)

格雷普

grep -o '^\S*'
Run Code Online (Sandbox Code Playgroud)

awk

awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

正如评论中指出的那样,-o不是 POSIX;然而 GNU 和 BSD 都有它,所以它应该适用于大多数人。

此外,\s/\S可能并非在所有系统上都存在,如果您的系统无法识别它,您可以使用文字空格,或者如果您想要空格和制表符、括号表达式 ( [...]) 中的那些或[[:blank:]]字符类(请注意,严格来说\s是等效于[[:space:]]并包括垂直间距字符以及您可能不关心的 CR、LF 或 VT)。

在awk 一个假设的线不以空白字符开头。


Sté*_*las 15

cut -d ' ' -f 1 < your-file
Run Code Online (Sandbox Code Playgroud)

将是最有效的。

  • @约瑟夫R。你的意思是 `cut &lt; file` 还是 `cut file`?然后看http://unix.stackexchange.com/a/70759/22565 (5认同)
  • 我在你的几个答案中注意到了这一点,我想知道是否有原因:即使命令可以在没有它的情况下工作,你似乎总是添加输入重定向。你能解释一下为什么 `&lt;` 在这里有用吗? (4认同)