で消去私は、ファイル内の行のトンを持っていると私はsedのかどうかを知りたい、この変更、それは例えば、列SED
後にあるものは何でも消去することができます:
:用a20 is (on) Jan 15
を
a20 is (on)
で消去私は、ファイル内の行のトンを持っていると私はsedのかどうかを知りたい、この変更、それは例えば、列SED
後にあるものは何でも消去することができます:
:用a20 is (on) Jan 15
を
a20 is (on)
これには複数の方法があります。あなたは括弧の後に、すべてのライン上のすべてを削除したい場合は、単に使用:
sed -i 's/).*/)/' file.txt
は何上記されない「括弧の後にすべてのものと一致し、そしてちょうど括弧とマッチ全体を置き換えます」。
これは、最も簡単なツールは通常は正しいと言われています。 cut
は、あなたがそれに渡すdelimiter
に基づいて、行をブロックに「切り取る」非常に簡単な方法を提供します。例えば:あなたのファイルは少し異なっている、そして3番目の列は、必ずしも括弧で終わっていない場合
cut -d" " -f -3 file.txt
今、あなたの代わりにawk
を使用することができます。 Awkはより多くの制御を提供し、cut
よりもはるかにきめ細かです。例えば
:
awk -F' ' '{ print $1, $2, $3 }' file.txt
何上記行い、フィールドセパレータとして-F
で渡された文字を使用して、別のすべての行です。次に、3つの最初のフィールドを同じフィールドセパレータ(OFS
)で区切って出力します。
'$ 3'は' $ 1 OFS $ 2つのOFSに$ 3' –
@glennjackmanのおかげでグレンを印刷するよりも、同じですが、よりエレガント、$ 1、$ 2を印刷し、私はそれに気づいていませんでした。私はそれを反映するために私の答えを編集します。 – teotwaki
awk
たツールです非常によく表形式のデータを扱う:あなたが代わりにカットしてみてください
$ cat file.txt | tr -s ' ' | cut -d ' ' -f 1-3
:
$ awk -v n=4 '{for(i=n;i<=NF;i++)$i=""}1' file.txt
cut
はまだ別のツール(時々、あなたがcut
前tr
とホワイトスペースを圧迫する必要がある)です。
cut -d " " -f -3 FILENAME
はい、あなたはsedを使用することができます。
sed 's/^\([^ ][^ ]* [^ ][^ ]* [^ ][^ ]*\).*/\1/' file.txt > newfile.txt
は(bashで)SEDの後に「-i」スイッチを追加して、ファイル(すなわち、入力と出力が同じである)その場で編集することになります。これをテストしている間にまずバックアップを作成します。
一部のバージョンのsedでは、構文をより使いやすくする拡張正規表現を使用できます。 "-r" スイッチを使用します。
sed -r 's/^([^ ]+ [^ ]+ [^ ]+).*/\1/' file.txt > newfile.txt
[^ ]
は、スペースを除くすべての文字を意味します。 [^ ]*
スペース [^ ]+
以外の任意の文字のゼロ個以上のスペース \1
以外の任意の文字の1つ以上が当然の最初の括弧表現 で代替を意味し、あなたはいつも:-)代わりにカットし使用することができます意味意味:
cut -f-3 -d" " file.txt > newfile.txt
これまで見たことのある最も醜いsedコードでなければならない... o_O – Morlock
@Glenn - 良いキャッチ。コードを修正しました。私はそれをテストすることができませんでした。それは醜いかもしれないが、それは質問に答える。私はほぼ確実に自分のコードでカットを使用します。 – groovyspaceman
echo "a20 is (on) Jan 15" | sed 's/\(\s*\S*\)\{2\}$//'
a20 is (on)
時には簡単です、または:
これはあなたのために働くかもしれない
echo "a20 is (on) Jan 15" | sed 's/\(\S*\(\s*\S*\)\{2\}\).*/\1/'
a20 is (on)
誰も(、-iをsedのとは対照的に、sedのGNUを使用していないプラットフォーム上で動作します)perlの方法を言及していない:perl -p -i -e 's/(on).*/(on)/' filename
あなたはこの1の後にすべての行を削除しますか? *すべての行*をテキストで短縮しますか?またはすべての行を短縮しますか? –