13

私が探している行はファイル data.txt に保存されており、一度だけ出現する唯一のテキスト行です。

Linuxを使用してその特定の行を見つけるにはどうすればよいですか?

4

7 に答える 7

35

これは少し古いですが、これを探していると思います...

cat data.txt | sort | uniq -u

これにより、ファイル内で 1 回だけ発生する一意の値が表示されます。あなたが尋ねているなら、あなたは「有線」に精通していると思いますか?? もしそうなら、これはあなたが探しているものです。

于 2014-06-05T01:02:51.387 に答える
14

いくつかのコンテキストを提供するために(コメントするには、さらに担当者が必要です)、これは、コマンドラインを使用してオンラインLinuxサーバーでパスワードを発見し、レベルを上げることを含むBanditと呼ばれるオンライン「ウォーゲーム」で取り上げられる質問です.

data.txt を完全に見たい人のために、ここに貼り付けましたが、次のようになります。

NN4e37KW2tkIb3dC9ZHyOPdq1FqZwq9h
jpEYciZvDIs6MLPhYoOGWQHNIoQZzE5q
3rpovhi1CyT7RUTunW30goGek5Q5Fu66
JOaWd4uAPii4Jc19AP2McmBNRzBYDAkO
JOaWd4uAPii4Jc19AP2McmBNRzBYDAkO
9WV67QT4uZZK7JHwmOH0jnhurJMwoGZU
a2GjmWtTe3tTM0ARl7TQwraPGXgfkH4f
7yJ8imXc7NNiovDuAl1ZC6xb0O0mMBx1
UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
FcOJhZkHlnwqcD8QbvjRyn886rCrnWZ7
E3ugYDa6Wh2y8C8xQev7vOS8O3OgG1Hw
E3ugYDa6Wh2y8C8xQev7vOS8O3OgG1Hw
ME7nnzbId4W3dajsl6Xtviyl5uhmMenv
J5lN3Qe4s7ktiwvcCj9ZHWrAJcUWEhUq
aouHvjzagN8QT2BCMB6e9rlN4ffqZ0Qq
ZRF5dlSuwuVV9TLhHKvPvRDrQ2L5ODfD
9ZjR3NTHue4YR6n4DgG5e0qMQcJjTaiM
QT8Bw9ofH4x3MeRvYAVbYvV1e1zq3Xim
i6A6TL6nqvjCAPvOdXZWjlYgyvqxmB7k
tx7tQ6kgeJnC446CHbiJY7fyRwrwuhrs

それを行う1つの方法は、次を使用することです。

sort data.txt | uniq -u

このsortコマンドは、ファイルの内容を表示するという点で cat に似ていますが、ファイルを行ごとに辞書順に並べ替えます (一致するものが一緒になるようにアルファベット順に並べ替えます)。

|、あるコマンドからの出力を別のコマンドにリダイレクトするパイプです。

このuniqコマンドは、繰り返される行を報告または省略し、-u引数を渡すことで、一意の行のみを報告するように指示します。

このように一緒に使用すると、コマンドは data.txt を各行ごとに辞書順にソートし、一意の行を見つけてターミナルに出力します。

于 2015-07-14T13:04:34.283 に答える
2
sort -u data.txt | while read line; do if [ $(grep -c $line data.txt) == 1 ] ;then echo $line; fi; done 

ここで簡単なものを見るまで、私の解決策でした:

sort data.txt | uniq -u
于 2016-08-22T20:42:05.510 に答える
1

投稿にさらに情報を追加します。どのようdata.txtに見えますか?このような:

11111111
11111111
pass1111
11111111

またはこのように

afawfdgd
password
somethin
gelse...

そして、パスワードがファイルにあることを知っていますか、それとも文字列を繰り返さないで検索しますか。

パスワードを知っている場合は、次のようなものを使用してください

cat data.txt | grep 'password'

パスワードがわからず、このパスワードがファイル内の一意の行のみである場合は、スクリプトを作成する必要があります。たとえばPythonで

file = open("data.txt","r")
f = file.read()
for line in f: 
   if 'pass' in line:
        print pass

もちろん、パスを別のものに置き換えてください。たとえば、行からのスライス。

于 2012-10-08T14:08:01.623 に答える
1

そして、使用中のツールがawkだけの場合:

awk '{a[$1]++}END{for(i in a){if(a[i] == 1){print i} }}' data.txt
于 2017-12-08T17:40:06.163 に答える