1行の数字を削除するためのsedスクリプトを書く方法は?

1行の数字を削除するためのsedスクリプトを書く方法は?

サンプルファイル

a.b.gg3d 0000000001 0000000001 y
a.b.112a 0000000000 0000000001 y
a.b.gg3s 0000000001 0000000001 y
a.b.1111 0000000000 0000000001 m

上記の例に似た約3,000本の一意の行を含むファイルがあります。 sedを使用して各行から「xxxxxxxxx xxxxxxxxxx」数を削除したいと思います。上記の例を使用して、sedスクリプトに次の出力を生成させます。

a.b.gg3d y
a.b.112a y
a.b.gg3s y
a.b.1111 m

どうすればいいですか? sedに、「最初のスペースの後のすべての数字を削除し、最後の文字を保持します」と指示するコマンド文字列はありますか?

答え1

この入力が与えられたら、最初のフィールドと最後のフィールドを維持したいと思います。 awkを使うのはとても簡単です。

awk '{print $1, $NF}' filename

sedを使用すると、スペースで区切られたすべての数字のみの単語が置き換えられます。

sed ':a; s/ [[:digit:]]\+ / /; ta'

答え2

cut最初と4番目の列を印刷する別の使用専用ソリューション:

cut -d' ' -f1,4 < samplefile.txt

答え3

sed -e 's/[ ].*[ ]/ /' yourfile

一番左のスペースから一番右のスペースまで見て、1つのスペースに置き換えます。 IOW、最初のフィールドと最後のフィールドを維持します。

先行および/または末尾のスペースがないとします。タブはありません。

それ以外の場合は、いつでも次のことができます。

SPC=`echo 'x' | tr 'x' '\040'`
TAB=`echo 'x' | tr 'x' '\011'`
WS="[$TAB$SPC]"
sed -e "s/^$WS*//;s/${WS}\$//;s/${WS}.*${WS}/${SPC}/" < yourfile

答え4

$ echo "a.b.gg3d 0000000001 0000000001 y" |sed -r 's/[ ]+[0-9]+//g'
a.b.gg3d y

-r正規表現パターン

1つ以上のスペースと0〜9の範囲の1つ以上の数字を検索しています。技術的にはこれは2回一致するので、abgg3dとyの間に3番目のスペースが残ります。

関連情報