grep —区切り文字トークンの後のテキストを削除する


12

私は;すべての行の最初の後にすべてを削除する必要があるファイルを持っています。

したがって、このようなファイル:

sdfsdsdf;
fsdfsddf;sdfsd;

これは次のようになります。

sdfsdsdf
fsdfsddf

私はに見てきたgrepsed。これらのコマンドのいずれかを組み込んだ回答をいただければ幸いです。

回答:


5

sed この状況では、おそらくawkやperlよりも簡単で高速です。

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
これは本来よりも複雑です!sed 's/;.*//'
ジル 'SO-悪であるのをやめる'

失礼ですが同意できません。perl -pe 's /;.*//' some_file_nameは同じくらい簡単で、大きなファイルで操作する場合はおそらく最大1500%高速です。
コードヘッド

私はsedは利用できるがperlは利用できないいくつかのシステムを持っているので、それらが十分な場合はより軽量なソリューションを使用することをお勧めします。
-dubiousjim

7

別のオプションは、cutコマンドを使用することです

cat a.file | cut -d';' -f1

9
猫の役に立たない

3

私は通常、awkこのようなものに使用します:

cat a.file | awk -F=";" '{ print $1 }'

それはファイルの各行を取り、区切り文字の前の最初のグループを印刷します -F



1
セカンドデニス。そして、LinuxおよびBSDでは、-F = ";" 意図したとおりに機能しません。また、$ 1を引用することもできます。awk-F ";" '{print $ 1}' a.file
コードヘッド

2

GNUを使用してそれを行う方法を次に示しますgrep

grep -Po "^[^;]+(?=;?)" filename

Gnu grepがなければgrep -Eo '^[^;]+;' filename、ほとんど取得できますが、1文字が多すぎます。grep -Eo '^[^;]+' filenameそれもほとんど取得しますが、を持たない完全な(空でない)行も出力します;
dubiousjim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.