次の列から始まる任意の数字を除いて、特定の区切り文字がないテキストファイルの最初の列を抽出する方法を探しています。例:
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ユーティリティを使用できます。
$ 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]'
を使用すると、数字の前のスペースも削除されます。
そして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
GNU grep:
grep -Po '.*?(?=\s*\d)' file
GNU grep
grep -o '^[^[:digit:]]*' file
(123foo
のような行、つまり数字の左側の部分が空の行については何も出力しないことに注意してください)。