2017-02-20 4 views
0
awk '/[a-z]\+|\+[a-z]/{print NR, echo ":", $0, echo "[SHOULD BE IN FORMAT [<space>operator<space>]"}' file.txt 

Ich habe einige Anforderungen wie wenn es keinen Platz vor oder nach jedem Operator sollte durch Fehler in der Shell. So kam ich mit so etwas wie dies oben:Wie nach exakter Übereinstimmung in Shell-Skript suchen, die Zeichen vor und nach dem Spiel ausschließt?

  • wenn es keinen Raum vor + ist oder kein Platz nach + wird durch die Nachricht.

  • Aber wenn ich den gleichen Fall tue für - Betreiber wie

    awk '/[a-z]\-|\-[a-z]/{print NR, echo ":", $0, echo "[SHOULD BE IN FORMAT [<space>operator<space>]"}' file.text 
    

    obwohl es für die folgenden Fälle funktioniert: [ a-b, a -b, a- b ] aber nicht bei folgenden wie

  • wenn im file.text gibt es einige Zeilen wie

    /* 
        this->name = "string" 
    */ 
    //here it is showing the message like echo "[SHOULD BE IN FORMAT [<space>operator<space>]"}' which is not desired because it is also searches for - in ->. 
    

Also bitte vorschlagen, es zu reparieren?

+0

Bitte nehmen Sie sich Zeit, um Ihre Sache richtig zu formatieren. –

Antwort

1

Sie könnten nach der Zeichenkette -> vor den obigen Übereinstimmungen suchen und sie durch etwas ersetzen, das den Test nicht scheitert. (wie das Leerzeichen).

0

Verwenden ($0!~ /(.*\->.*)/) Linien auszunehmen ->

awk ' \ 
    ($0~/([a-z]\-|\-[a-z])/) && ($0!~ /(.*\->.*)/)         \ 
    {print NR, echo ":", $0, echo "[SHOULD BE IN FORMAT [<space>operator<space>]"} \ 
' file.txt 

Aber wenn Sie nur enthalten, funktionieren die Dinge nicht wie a->exp = r-j: Linie für immer ausgeschlossen werden würde. Andernfalls, Kredite an Mike, verwenden Sie sub, um -> durch .. zu ersetzen, bevor Sie nach Ihrem Muster suchen; versuchen Sie dies:

awk ' { \ 
    tmp_line = $0 ;                \ 
    sub("->", "..", tmp_line) ;             \ 
    if (tmp_line ~/([a-z]\-|\-[a-z])/)           \ 
    {print NR, echo ":", $0, echo "[SHOULD BE IN FORMAT [<space>operator<space>]"} \ 
    } ' file.txt 
Verwandte Themen