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


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

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

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

任何帮助将不胜感激。

Answers:


35

塞德

sed 's/\s.*$//'

格列普

grep -o '^\S*'

Awk

awk '{print $1}'

正如评论中指出的,-o不是POSIX;它不是POSIX。但是GNU和BSD都拥有它,因此它应该适合大多数人。

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

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


14
cut -d ' ' -f 1 < your-file

将是最有效的。


4
我在几个答案中都注意到了这一点,我想知道是否有原因:即使命令在没有它的情况下也可以工作,您似乎总是添加输入重定向。您能解释一下为什么在<这里有用吗?
Joseph R.

5
@JosephR。你是说cut < filevs cut file?然后看到unix.stackexchange.com/a/70759/22565
斯特凡Chazelas

cut可能是解决这种简单问题的最佳解决方案。我会为更复杂的匹配保留awk(或perl)。
ChuckCottrill

@StephaneChazelas感谢您的(特色)见解:)
Joseph R.


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.