2017-03-27 5 views
-1

Lassen Sie uns eine Zeichenfolge haben: ./dfsgfd/dfs/as/ssss.So löschen (oder ersetzen) Sie alle Zeichen zwischen zwei ausgewählten Zeichen. Sed. Bash

Ich brauche dies zu erhalten: |-----ssss

Also schreibe ich ein Skript mit sed: sed -r -en 's/.\//|--/;s/\//-/g;s/-[^\-]*-/--/g;'

Durch diese regexp sed -r -e 's/.\//|--/;s/\//-/g;' Ich habe: |--dfsgfd-dfs-as-ssss .

Und jetzt muss ich alle Zeichen zwischen - und - löschen. Wie kann ich das machen? Diese Regexp macht es nicht gut: s/-[^\-]*-/--/g;.

Vielen Dank!

+1

Ihre Anforderung ist 'zu bekommen | ----- ssss' als Ausgabe - Richtig? Wo haben wir 5 "-" gefolgt von Pipe-Symbol. Gibt es Kriterien, um diese fünf "-" zu drucken? –

+1

Sie brauchen wirklich nicht 'sed' für dieses ...' echo "| ----- $ {s ## * /}" 'wo' $ s' ist Ihre Zeichenkette ... –

+0

Sie suchen etwas wie das - 'echo" ./dfsgfd/dfs/as/ssss"|sed -r -e 's /.(.*)\// | -----' ' Ausgabe '| - ---- ssss' –

Antwort

0

Wenn ich richtig verstehe:

  • wollen Sie jeden / mit -
  • ersetzen alle zwischen Zeichen löschen, sondern -
  • prepend es mit |-

eine von vielen möglichen Lösungen

str='./dfsgfd/dfs/as/ssss' 
out="|-$(sed 's:[^/]::g;s:/:-:g' <<<"${str%/*}/")${str##*/}" 
echo "$out" 

Ausgang

|-----ssss 

aus: str='./a/b/c/d/e/f/g/i/jjj'

|----------jjj 
Verwandte Themen