サンプルファイル
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番目のスペースが残ります。