grep: match all characters up to (not including) first blank space
I realize this has long since been answered with the grep solution, but for future generations I'd like to note that there are at least two other solutions for this particular situation, both of which are more efficient than grep.
Since you are not doing any complex text pattern matching, just taking the first column delimited by a space, you can use some of the utilities which are column-based, such as awk or cut.
Using awk
$ awk '{print $1}' text1.txt > text2.txt
Using cut
$ cut -f1 -d' ' text1.txt > text2.txt
Benchmarks on a ~1.1MB file
$ time grep -o '^[^ ]*' text1.txt > text2.txt
real 0m0.064s
user 0m0.062s
sys 0m0.001s
$ time awk '{print $1}' text1.txt > text2.txt
real 0m0.021s
user 0m0.017s
sys 0m0.004s
$ time cut -f1 -d' ' text1.txt > text2.txt
real 0m0.007s
user 0m0.004s
sys 0m0.003s
awk
is about 3x faster than grep
, and cut
is about 3x faster than that. Again, there's not much difference for this small file for just one run, but if you're writing a script, e.g., for re-use, or doing this often on large files, you might appreciate the extra efficiency.
You are putting quantifier *
at the wrong place.
Try instead this: -
grep '^[^\s]*' text1.txt > text2.txt
or, even better: -
grep '^\S*' text1.txt > text2.txt
\S
means match non-whitespace character. And anchor ^
is used to match at the beginning of the line.