2017-03-05 1 views
0

Ich kann keine anderen Befehle wie cat oder strings in .txt-Dateien lesen oder anwenden, da dies nicht erlaubt ist. Ich muss eine Datei namens flag.txt lesen, aber diese Datei ist auch auf der Blacklist. Gibt es eine Möglichkeit, * .txt mit dem Befehl head zu lesen? Der Befehl head ist zulässig.Wie liest man die gesamte Textdatei mit dem Befehl head linux?

blacklist=\ 
'flag\|<\|$\|"\|'"'"'\|'\ 
'cat\|tac\|*\|?\|less\|more\|pico\|nano\|edit\|hexdump\|xxd\|'\ 
'sed\|tail\|diff\|grep\|paste\|strings\|bas64\|sort\|uniq\|cut\|awk\|'\ 
'bzip\|gzip\|xz\|tar\|ar\|'\ 
'mv\|cp\|ln\|nl\|'\ 
'python\|perl\|sh\|cc\|g++\|php\|hd\|g++\|gcc\|curl\|tcp\|udp\|'\ 
'scp\|sftp\|wget\|nc\|netcat' 

Dank

+0

Warum die willkürliche Beschränkung, welche Programme Sie verwenden können? – chepner

+0

Vielleicht gibt es einen Grund, warum sie dich das nicht tun lassen? – karakfa

+0

Ich verstehe die Frage nicht ganz, aber ja, Sie können mit 'head -100 * .txt' die ersten 100 Zeilen aller' * .txt' Dateien ausgeben. Sie können die Anzahl der Zeilen mit 'wc -l file' (nicht auf Ihrer Liste) herausfinden oder einen lächerlichen Zeilenwert verwenden. Du scheinst auch nicht in der Blacklist "rev" zu haben, also könntest du 'rev file | rev "auch. Oder benutzen Sie 'ed':' ed file' und drücken Sie dann 5, um Zeile 5 von 'file' zu ​​drucken. –

Antwort

0

tun Sie einige Alternative des head *.txt Befehl wollen? Wenn ja, ls/find und xargs wird helfen, aber es kann nicht identifizieren TXT-Datei, wird es die gesamte Datei unter dem Verzeichnis lesen.

ls -1| xargs head 
+0

wir können keine xargs verwenden, weil ar auf der blacklist nicht erlaubt ist. –

+0

@LeeGunMo Dann ist Ihre Blacklist unvollständig, da 'xargs' nicht dort erscheint - bitte stellen Sie sicher, dass Ihre Frage korrekt ist. –

0

können Sie die ` (backtick) in folgenden Weise verwenden:

head `ls -1` 

Graviszeichen hat eine ganz besondere Bedeutung. Alles, was Sie zwischen Backticks Typ (ausgeführt) wird ausgewertet durch die Schale vor dem Haupt Befehl

So wird der Befehl wie folgt vor:

`ls -1` - wird mit den Dateinamen führen

Kopf - in ls -1 aufgeführt wird den Beginn der Dateien zeigen

Mehr Infos über Graviszeichen in this answer

0 gefunden werden
0

Wenn Sie einen Glob benötigen, der mit flag.txt übereinstimmt, aber weder * noch die Zeichenfolge flag verwenden kann, können Sie stattdessen fl[a]g.txt verwenden. Dann die gesamte Datei drucken head arbeiten, verwenden -c und die Größe der Datei übergeben:

head -c $(stat -c '%s' fl[a]g.txt) fl[a]g.txt 

Ein anderer Ansatz wäre die Shell zu verwenden, um die Datei zu lesen:

while IFS= read -r c; do echo $c; done < fl[a]g.txt 

Sie könnten verwenden Sie auch einfach paste:

paste fl[a]g.txt 
Verwandte Themen