2016-07-19 16 views
1

Ich habe unter Anforderung wo in einem Verzeichnis habe ich eine Liste von Dateien und ich muss eine eindeutige Zeichenfolge Start-Index in jeder Datei finden.Dieser String ist jeder Datei gemeinsam. Es wäre besser, wenn ich dafür eine Lösung in Shell Scripting bekomme.Startindex einer eindeutigen Zeichenfolge in jeder einzelnen Datei in Shell-Scripting

enter image description here

ist Liste von Dateien und ich nehme an Startindex der Zeichenfolge finden will „hallo, das ist, vijay, kumar“, die sicher in jeder Datei kommen.

+0

Ich verstehe, dass Sie das gemeinsame Präfix unter einer Liste von Dateien in einem Verzeichnis finden möchten, das ist klar. Aber ich verstehe nicht, ist die "nehme an, ich will Startindex der Zeichenfolge zu finden", hi, das ist, Vijay, Kumar ", die in jeder Datei sicher kommen wird." Teil, kannst du es besser erklären? – ddb

+0

zum Beispiel habe ich die Zeichenfolge ", Hallo, das ist, Vijay, Kumar" gegeben, die sicher in den Inhalt jeder einzelnen Datei und nur einmal kommen wird und ich möchte den Startindex der Zeichenfolge in jedem erwähnt wissen und jede Datei. –

Antwort

0

wir diese Testdateien betrachten:

$ cat file1 
,hi,this,is,vijay,kumar 
$ cat file2 
Some text here,hi,this,is,vijay,kumar 
$ cat file3 
Some more text 
here that goes 
on,hi,this,is,vijay,kumar 

den Standort zu finden, in Bytes, von der Zeichenfolge in jeder Datei:

$ grep -ob ',hi,this,is,vijay,kumar' file* 
file1:0:,hi,this,is,vijay,kumar 
file2:14:,hi,this,is,vijay,kumar 
file3:32:,hi,this,is,vijay,kumar 

-b sagt grep die 0-basierte Byte zurück versetzt innerhalb der Eingabedatei. -o weist grep an, den Byte-Offset der übereinstimmenden Zeichenfolge selbst zurückzugeben, nicht die Zeile, in der sich die übereinstimmende Zeichenfolge befindet.

Aus den Ergebnissen sehen Sie, dass Ihre Zeichenfolge bei Byte-Offset 0 von Datei1, Byte-Offset 14 von Datei2 und Byte-Offset 32 ​​von Datei3 auftritt.

Ersetzen Sie file* mit den Namen Ihrer Dateien oder, noch einfacher, mit einem Glob, der den Namen der Dateien entspricht, die Sie interessieren. Von Ihrem Bild könnte das 201606231142_63* sein.

+0

hi John, das ist, wie ich es in Kitt gezeigt habe, wenn ich den von Ihnen vorgeschlagenen Befehl ausführen. 201606231442_6372.214: 0: CLT, *********************, ES, 201606231442_6373.214: 0: CLT, ***** ******************, ES, ich möchte "0" nach dem Dateinamen hervorheben –

+0

Versuchen: 'Grep-ob ', hallo, das ist, vijay, kumar' Datei * | sed "s /: [0-9] *:/$ (tput smso) & $ (tput rmso) /" ' – John1024