指定された行のすべての文字(数値を除く)を印刷します。

指定された行のすべての文字(数値を除く)を印刷します。

ファイルがあります。

ファイル1:

Edward-201-singer
Andrew-James-404-writer

出力が欲しいです。

Edward
Andrew-James

答え1

数字が見つかるまで、1行のすべての文字が欲しいとします。その後、-その数値の前のオプションの値も除外します。

sed 's/-\{0,1\}[[:digit:]].*//' your-file

(GNUの場合は、または他のものにsed置き換えることができます)。\{0,1\}\?sed -E 's/-?[[:digit:]].*//'

これはあなたの例を処理する必要がありますが、詳細がなければファイルのすべてを処理するとは言えません。

ファイルを所定の位置に変更したい場合、一部のsed実装では、-i.baksedコマンドにaを追加するか(ファイルをにバックアップしyour-file.bakて変更your-file> new-file、最後にaを追加してnew-file結果を書き込むことができます。

答え2

最初の数字の後のダッシュ(およびダッシュ数字)の後のすべての内容を削除するには、次の手順を実行します。

sed 's/-[0-9].*//' file

ファイルの質問に提供されたデータに基づいてfile生成

Edward
Andrew-James

質問のタイトルに記載されているように数字のみを削除することはを使用して実行できますがtr -d '0-9' <file

Edward--singer
Andrew-James--writer

...あなたが望むものではありませんか?

答え3

フォーマットに関する他の情報がわからない場合でも、これは指定した両方の値に適用されます。

while read
do
    echo "${REPLY%-*-*}"
done < file1

関連情報