it-swarm.com.de

letzte n Zeichen in einer Zeichenfolge mit Shell-Skript ausschneiden

So entfernen Sie alle n Zeichen aus einer bestimmten Zeichenfolge mithilfe von Shell-Skripts

ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,

Die Ausgabe erfolgt im folgenden Format 

ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
13
anish

Um den Titel Ihrer Frage mit Angabe Schneiden des letzten n-Zeichens in einer Zeichenfolge zu beantworten, können Sie die Teilstring-Extraktionsfunktion in Bash verwenden.

[email protected]$ A="123456"
[email protected]$ echo ${A:0:-2}  # remove last 2 chars
1234

Basierend auf Ihren Beispielen möchten Sie jedoch, alle nachfolgenden Kommas zu entfernen, in diesem Fall könnten Sie sed 's/,*$//' verwenden.

[email protected]$ echo "ssl01:49188,ssl999999:49188,,,,," | sed 's/,*$//'
ssl01:49188,ssl999999:49188

oder für eine reine Bash-Lösung können Sie die Entfernung von Teilstrings verwenden:

[email protected]$ X="ssl01:49188,ssl999999:49188,,,,,"
[email protected]$ shopt -s extglob
[email protected]$ echo ${X%%+(,)}
ssl01:49188,ssl999999:49188

Ich würde den Ansatz sed verwenden, wenn die Umwandlung auf eine ganze Datei angewendet werden muss, und den Ansatz zum Entfernen der bash-Unterzeichenfolge, wenn der Zielstring bereits in einer bash-Variablen enthalten ist.

40
Shawn Chin

Mit sed:

sed 's/,\+$//' file
11
cmbuckley

Ich denke, Sie müssen diese unnötigen ,s entfernen

sed 's/,,//g;s/\,$//g' your_file

geprüft:

> cat temp
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,,,
ssl01:49188,
ssl01:49188,,,,,
ssl01:49188,ssl999999:49188,,,,,
ssl01:49188,abcf999:49188,,,,,
> sed 's/,,//g;s/\,$//g' temp
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188
ssl01:49188,ssl999999:49188
ssl01:49188,abcf999:49188
> 
1
Vijay

Mit sed:

sed 's/,,*$//g' file 
1
Guru