我正在寻找一种方法来提取文本文件的第一列,该文本文件除了下一列开始的任意数字之外没有特定的分隔符。例子:
John Smith 1234 Main Street
Amy Brown and Sally Williams 9 Drury Lane
Sunny's 1000 Brown Avenue
预期输出为:
John Smith
Amy Brown and Sally Williams
Sunny's
似乎cut
不支持以下功能cut file.txt -d {0..9} -f 1
解决方案可以使用任何标准的 UNIX 实用程序。
答案1
$ awk -F'[0-9]' '{ print $1 }' file
John Smith
Amy Brown and Sally Williams
Sunny's
我们-F'[0-9]'
说数字被视为输入数据中的字段分隔符,并且print $1
我们输出第一个数字分隔字段。
更改-F'[0-9]'
为-F' *[0-9]'
还可以删除数字之前的所有空格。
答案2
以及一个sed
解决方案:
echo "John Smith 1234 Main Street
Amy Brown and Sally Williams 9 Drury Lane
Sunny's 1000 Brown Avenue" | sed 's/ *[0-9].*$//'
John Smith
Amy Brown and Sally Williams
Sunny's
答案3
GNU grep:
grep -Po '.*?(?=\s*\d)' file
答案4
与GNUgrep
grep -o '^[^[:digit:]]*' file
(请注意,对于像 之类的行,它不会输出任何内容123foo
,即数字左边部分为空的行)。