Ich bin auf einen netten Einzeiler gestoßen, um nach Text zu suchen und die Ergebnisse mit einer gegebenen Anzahl von nachfolgenden und folgenden Zeilen auszudrucken. Ich versuche ein Skript daraus zu erstellen. Bisher ist es das, was ich habe:Skript mit nawk druckt keine Ausgabe auf Bildschirm
# *********************************************************
# This uses nawk to list lines coming prior to and after
# the given search string.
# Format: xgrep <string> <file> <before> <after>
# ********************************************************
STR=$1
FILE=$2
BEF=$3
AFT=$4
export STR
export FILE
export BEF
export AFT
nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=$BEF a=$AFT s=$STR $FILE
Das Problem ist, dass der Ausgang des nawk Befehls nicht auf dem Bildschirm angezeigt werden
>xgrep "bin/sh" * 0 3
>
Aber wenn ich in dem Befehl eingeben, erhalte ich ein richtiger Ausgang:
>nawk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=0 a=3 s="bin/sh" *
#!/bin/sh
export AEGIS_PROJECT=$1
export EDITOR=cat
#!/bin/sh
aegis -cpu $pwd
aegis -dbu $1
#!/bin/sh
cd $HOME/ex_7/src/DTTCom
NRMan alphabuild clean
NRMan alphabuild library ex_7 8.19 app TEST DTTCom debug -j10
#!/bin/sh
cd $HOME/icx/src/DTTCom
NRMan alphabuild clean
NRMan alphabuild library icx_1 1.1 app TEST DTTCom debug -j10
#!/bin/sh
# *********************************************************
# This uses nawk to list lines coming prior to and after
# the given search string.
Was ist der Grund dafür und wie kann ich das Skript zum Funktionieren bringen?
Danke. Es funktionierte, als ich die "Datei" mit "" umhüllte. Gibt es eine Möglichkeit, dies innerhalb des Skripts zu tun, so dass der Benutzer sich nicht mit einfachen Anführungszeichen beschäftigen muss? – Gayan
Siehe Update, @Gayan. – paxdiablo
Wie kann ich "sed" s/^/$ 4:/"ändern, um die Zeilennummer der Datei zu drucken? – Gayan