2016-08-27 3 views
-1

Ich versuche, SED zu verwenden, um Text aus zwei Wörtern zu extrahieren, wie "Konto" und "Recognized", und ich möchte, dass die Suche Groß-und Kleinschreibung nicht beachtet. Also habe ich versucht, den ich Parameter zu verwenden, aber diese Fehlermeldung angezeigt:sed Case Insensitive Suche Matching

cat Security.txt | sed -n "/Account/,/Recognized/pI" | sed -e '1d' -e '$d' sed: -e expression #1, char 24: extra characters after command

+1

Veröffentlichen Sie den Inhalt von 'security.txt'. –

+0

Security.txt kann wie diese Beispiele in Englisch oder Italienisch, geschrieben werden: cat EN_Security.txt | sed -n "/Account/,/Recognized/p" | head Account Activity * Checkpoint Flow Started Saturday, April 16, 2016 at 11:26am UTC+02 ::: % cat EN_Security.txt | sed -n "/Account/,/Recognized/p" | tail * Session updated Wednesday, June 17, 2015 at 2:04pm UTC+02 ::: Recognized Machines user2965031

+0

% cat IT-Sicurezza.txt | sed -n "/account/,/Recognized/p" | head Attività account * Login Venerdì 25 settembre 2015 alle ore 17:55 UTC+02 ::: % cat IT-Sicurezza.txt | sed -n "/account/,/Recognized/p" | tail * Login Martedì 4 febbraio 2014 alle ore 20:28 UTC+01 ::: Recognized Machines user2965031

Antwort

0

Verwendung:

sed -n "/Account/,/Recognized/Ip" 

dh die Reihenfolge an: Ip statt pI

+0

Security.txt Datei enthält manchmal sowohl italienische Sätze (zB "Attività account") als auch englische Sätze (zB "Account Activity"), und der Befehl, den Sie vorgeschlagen haben, wenn er syntaktisch korrigiert wird, greift er nicht den Unterschied zwischen die Wörter "Konto" und "Konto". – user2965031

+0

sollte es auch '/ Account/I' sein – Sundeep

+0

@ user2965031 Ich habe mich nur auf den Fehler konzentriert, aber ja, wenn beide Wörter case insensitive sein müssen, dann sollte'/Account/I' verwendet werden. –

0

Vermeiden useless use of cat

/pattern/I ist, wie case-insen zu spezifizieren sitive Anpassung in sed

sed -n "/Account/I,/Recognized/Ip" Security.txt | sed -e '1d' -e '$d' 

Sie können einzelne sed Befehl verwenden das gleiche zu erreichen:

sed -n '/account/I,/recognized/I{/account/I!{/recognized/I!p}}' Security.txt 

Oder awk

awk 'BEGIN{IGNORECASE=1} /account/{f=1; next} /recognized/{f=0} f' Security.txt 

Referenz:

+0

Es ist sehr seltsam, der Befehl sed -n "/ account/I,/recognized/Ip" funktioniert auf "EN-Security.txt" und funktioniert nicht auf "IT-Security.txt", obwohl beide die Sequenz enthalten "Anerkannte Maschinen". – user2965031

+1

@ user2965031 das hilft sowieso nicht, was Ihr Problem sein könnte ... überprüfen Sie http://StackOverflow.com/Help/Mcve und bearbeiten Sie Ihre Frage entsprechend – Sundeep

0

Sie haben useless use of cat, wo Sie die Datei direkt auf sed gespeist haben soll. Unten könnte ein Weg sein, es zu tun.

$ cat file.txt 
Some stuff Account sllslsljjs Security. 
Another stuff account name and ffss security. 
$ sed -nE 's/^.*account[[:blank:]]*(.*)[[:blank:]]*security.*$/\1/pI' file.txt 
sllslsljjs 
name and ffss 

Die [[:blank:]]* ist gierig und die Räume vor und nach dem gewünschten Text abzustreifen. Die Option -E ermöglicht die Verwendung erweiterter regulärer Ausdrücke.