ファイルの特定のコンテンツを取得する


9

だから私はそれらについて聞いたのでこの問題のためのツールが存在することを知っていますが、それらが何であるかはわかりません。

/ etc / passwd内のユーザー名以外のすべてのデータを除外するようなことをしたいのですが。

たとえば、次のファイルからuser1、user2、およびuser3を取得したいとします。この場合のロジックは、「ファイルの各行の最初の ':'までテキストを取得する」です。

user1:x:1:4
user2:x:2:5
user3:x:3:6

出力は次のようになります。

user1
user2
user3

回答:


19

cutまさにこの目的のために存在します。-dフラグは、区切り文字を指定し、-f出力するフィールドを指定:

cut -d: -f1 /etc/passwd

への引数は、最初と3番目のフィールドを表示する、または最初の3つを表示する-fようなものにすることができます。フィールドの代わりにバイトと文字を読み取るためのおよびフラグもあります。より柔軟なものが必要な場合は、通常はトリックを実行します(マシューの回答を参照)1,31-3-b-cawk


13

表形式の入力からデータを抽出するたびに、awkを検討する必要があります。ほぼすべてのUnixシステムで利用できるので、次の方法をとることをお勧めします。

awk -F':' '{print $1}' /etc/passwd 
  • -F':':列区切り文字として「:」を定義します。
  • '{}':この命令を行ごとに実行します。
  • print $1:最初の列を画面に出力します。

3
ランダムなメモ:awkファイル名を取得するので、パイプをスキップして実行できますawk -F: '{print $1}' /etc/passwd
Michael Mrozek

私はいつもawkがファイル名を取ることを忘れているようです、私は常にそれをパイプラインで使用しているようです... sedのようなもの| awkなど...
マシューブラニガン

ファイルで動作するほとんどすべてがファイル名をとります(trそしてat、そうしないいくつかのことのいくつかの例です)。
追って通知があるまで一時停止。

3

これがPerlのワンライナーです:

perl -F/:/ -lane 'print $F[0]' /etc/passwd

1

perlとawkの下には、そのようなジョブのための3番目のツールがあり、sedです。

sed 's/:.*//' FILE 

これは置換コマンドです:コロンからの置換:、その後にドットが続きます。これは、あらゆる種類の文字のカウント(*)のジョーカーであり、何もありません。

これは 's(ubstitute)/ FROM / TO /'であり、TOは空です。つまり、最初からすべてを削除します(sedはデフォルトで貪欲であるため)コロン(sedは行全体で機能するため、行末まで)。

もちろんcut同様に細かいコマンドですが、私は別の家族からだと思います。


1

あなたの例では、3つの名前はすべて同じ長さです。そのような場合-これは発生する可能性がありますが、/ etc / passwdの場合はそうではありません-colrmも使用できます。

echo "user1:x:1:4
> user2:x:2:5
> user3:x:3:6" | colrm 6
user1
user2
user3

または、もちろん

cat FILE | colrm 6 

useless use of cat当てはまらないまれなケースです。パラメーターとして機能するFILEをcolrmに渡すことができないためです。)


catそこではまだ役に立たない:colrm 6 < FILE
manatwork 2012年

ええ、そうですが、を呼び出すときのように、役に立たないわけではありませんcat foo | grep bar
ユーザー不明

1

完全を期すために、外部コマンドは必要ありません。シェル(Bourneシェルまたは互換)はそれを単独で処理できます。

while IFS=':' read -r needed garbage; do echo "$needed"; done < input_file

もちろん、これはおそらく考えられるすべてのソリューションの中で最も遅いため、巨大なファイルの場合は別のソリューションを選択します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.