2016-07-29 8 views
0

Ich möchte einzelne Zeichenfolge in zwei verschiedene Zeichenfolgen unter Verwendung sed brechen.Wie kann man Text aus einem bestimmten Punkt in einer Zeichenfolge mit sed extrahieren?

Für zB:

STRING := folder1_test.abc_xxx 

STRING1 := folder1_test 

STRING2 := abc_xxx 

or 

STRING := folderB_test folderA_test.yyyy_xx 

STRING1 := folderB_test folderA_test 

STRING2 := yyyy_xx 

So was auch immer vor dem Punkt ist, ich möchte in der ersten Zeichenfolge und nach Punkt ich das Ding in der zweiten Zeichenfolge wollen (.) (.).

Speziell mit sed Befehl nur. Wie ich in der Makefile-Implementierung verwende.

+0

würde 'Schnitt -d.' ausreichen? – ewcz

+0

können Sie mehr angeben, wie Cut -d insbesondere für den obigen Fall verwenden, da ich neu in Linux bin. –

+0

was wird Ihre erwartete Ausgabe sein, wenn die Eingabe etwa wie folgt ist: 'STRING: = OrdnerC_Test OrdnerD_R.zzzz_yy OrdnerA_Test.JJJJ_xx' – sat

Antwort

0

Von Ihrem Beitrag Ich verstehe, dass Sie dies in einem Makefile müssen (und die Syntax wird dies bestätigt). In diesem Fall ist es das, was Sie brauchen: https://stackoverflow.com/a/8540718/3464942

Zum Beispiel:
STRING1 := $(firstword $(subst ., ,$(STRING)))
STRING2 := $(or $(word 2,$(subst ., ,$(STRING))),$(value 2))

+0

Dank @fara es funktioniert für mich. –

0

einer Befehlszeile:

Mit tr KMD:

echo 'folderB_test folderA_test.yyyy_xx' | tr "." "\n" 
# gives folderB_test folderA_test 
#  yyyy_xx 

Mit Cut (. Satz Trennzeichen und Anzeigefeld 1 (-f1)):

echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f1 
# gives folderB_test folderA_test 

Mit Cut (Begrenzer setzen auf und Anzeige Feld2 (-f2)):

echo 'folderB_test folderA_test.yyyy_xx' | cut -d. -f2 
# gives yyyy_xx 

Speichere das Ergebnis in einem Array und doch:

#!/bin/bash 

IN="[email protected];[email protected]" 

#With tr cmd: 
arr=$(echo $IN | tr ";" "\n") 

#With sed cmd: 
arr=$(echo $IN | sed 's/;/\'$'\n/g') 

for x in $arr 
do 
    echo "$x" 
done 

Gibt:

[email protected] 
[email protected] 
0

parameter expansion

$ str='folder1_test.abc_xxx' 
$ echo "${str%.*}" 
folder1_test 
$ echo "${str#*.}" 
abc_xxx 

$ str='folderB_test folderA_test.yyyy_xx' 
$ echo "${str%.*}" 
folderB_test folderA_test 
$ echo "${str#*.}" 
yyyy_xx 

ersetzen echo mit variabler Zuordnung verwenden je nach Anforderung

$ string='folderB_test folderA_test.yyyy_xx' 
$ string1="${string%.*}" 
$ echo "$string1" 
folderB_test folderA_test 
$ string2="${string#*.}" 
$ echo "$string2" 
yyyy_xx 

Hinweis: Es ist vorzuziehen, Kleinbuchstaben für benutzerdefinierte Variablen zu verwenden

0

Ich denke, es wird Ihre Frage beantworten.

sed 's/\(^\(.*\)\.\(.*\)$\)/STRING : \1\nSTRING 1: \2\nSTRING 2: \3/g'

Ex:

Sed ‚s/(...^() () $)/STRING: \ 1 \ nSTRING 1: \ 2 \ nSTRING 2: \ 3/g‘

folderB_test folderA_test.yyyy_xx // Eingang

STRING: folderB_test folderA_test.yyyy_xx

STRING 1: folderB_test folderA_test

STRING 2: yyyy_xx

Verwandte Themen