2017-10-31 4 views
0

Ich versuche, die Kommentarzeilen aus Matlab-Codes zu extrahieren.Wie werden Kopfzeilen extrahiert, die mit einem bestimmten Zeichen beginnen (führende Leerzeichen werden vernachlässigt)?

%% header comments 
% description of function 
% explanations of args 
%... 

function out = myfunc(in) 
... 
% in-code comment 
... 
%% 

Ich versuchte grep "^%" *.m, aber es gibt alle Kommentarzeilen aus.

Ich mag die Kommentare im Kopf nur

%% header comments 
% description of function 
% explanations of args 
%... 

So soll es vor function out = myfunc(in) stoppen. Vorhergehende Leerzeichen und Leerzeilen werden vernachlässigt.

Wie kann ich das machen?

Antwort

1

Um alle Kommentare vor dem function Schlüsselwort zu extrahieren, Sie sed mit Zwei-Ebenen-Filterung verwenden:

sed -n '1,/^function/{/^%/p}' file 

Für alle Linien (vom ersten) bis zum function, drucken nur mit dem diejenigen, die beginnen Kommentarzeichen % (Überspringen von Nichtkommentaren und Leerzeilen).


Im Detail. Der erste Teil n,/regex/ ist ein range address, mit der Startadresse in Zeile 1, und Endadresse in der ersten Zeile (nach 1), die mit function Zeichenfolge beginnt. Wenn function nicht garantiert auftritt, können Sie stattdessen [[:alnum:]] oder [[:alpha:]] verwenden. Unter GNU sed ist ein zusätzlicher Name für Wortzeichen verfügbar, \w.

Der zweite Teil, {/regex/ p}, wird nur für zuvor ausgewählte Linien (adressiert) ausgeführt. Und die Aktion p (Drucken) wird nur für die Zeilen ausgeführt, die mit % beginnen.

Beachten Sie auch die -n Flagge: es verhindert sed von jeder Zeile standardmäßig drucken. Zeile wird nur mit einer expliziten Aktion gedruckt.


Beispiel:

$ cat file 
%% header comments 
% description of function 
% explanations of args 

% date: ... 
% author: ... 

function out = myfunc(in) 
... 
% in-code comment 
... 
%% 

Ergebnis:

$ sed -n '1,/^function/{/^%/p}' file 
%% header comments 
% description of function 
% explanations of args 
% date: ... 
% author: ... 
+0

Works. Und da es keine Garantie gibt, gibt es immer ein Schlüsselwort 'function', das ich als' für f in * .m; mach sed -n '1,/^ \ w/{/ ^%/p}' $ f; fertig. Es wird geschätzt, wenn Sie einfache Erklärungen geben können, wie es den Text verarbeitet, z. '1,'. – Lee

+0

Ich werde es erklären, btw beachten Sie, das '\ w' ist eine GNU-Erweiterung. – randomir

0

können Sie awk verwenden den Druck zu starten, wenn ein Kommentar auf der ersten nicht Kommentarzeile gesehen und Ausfahrt:

$ awk '/^%/{f=1} /^[^%]/{exit} f' file 
%% header comments 
% description of function 
% explanations of args 
%... 
Verwandte Themen