it-swarm.com.de

Entfernen Sie den ersten Teil einer Saite mit sed

Wie komme ich daraus:

randomcollege-nt\user90

dazu:

user90

mit sed?

14
Roboman1723

Ich würde ein einfaches grep verwenden, um nach user90 zu suchen:

$ echo "randomcollege-nt\user90" | grep -o user90
user90

Wenn user90 nicht konstant ist, bevorzugen Sie diesen Befehl:

$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90

Verwenden Sie zum Schluss sed, um die Datei zu bearbeiten:

$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file

Oder um alle möglichen Benutzerkonten abzugleichen:

$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
15
Sylvain Pineau

Sie analysieren einen Text, um den Benutzernamen aus einer domain\username Zeichenfolge zu extrahieren, wahrscheinlich aus Windows. Die meisten der obigen Antworten beziehen sich nur auf Ihre spezifische Beispielzeichenfolge.

Der beste Weg, dies zu tun, ist die Verwendung von Regex in sed, um alles zu extrahieren, was nach \ kommt. So würden Sie es machen:

sed 's|.*\\\(.*\)|\1|'

Das passt zu allem (.*) bis zu einem Backslash (hier entgehen wir ihm, also ist es \\), dann passt es zu allem nach dem Backslash (.*), macht es aber zu einem Capture-Gruppe (dh eckige Klammern um sie, aber wir müssen sie auch maskieren, also \(.*\)). Nachdem wir nun das, was nach dem \ in der Zeichenfolge steht, als Erfassungsgruppe haben, drucken wir es aus, indem wir es mit \1 referenzieren.

Sie können den obigen Befehl sed mit jedem Domain-Namen verwenden, nicht unbedingt randomcollege-nt.

$ echo "randomcollege-nt\user90" | sed 's|.*\\\(.*\)|\1|'
user90

$ echo "domain\username" | sed 's|.*\\\(.*\)|\1|'
username

$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
19
Alaa Ali

Ein anderes sed:

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90

oder POSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
10
cuonglm

Ich weiß, dass Sie sed verwenden möchten, aber ich würde etwas anderes verwenden ...

echo "randomcollege-nt\user90" | cut -d'\' -f2
8
kervin

Ist das die Frage?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

wenn die Zeichenfolge random college-nt nicht zulässig ist, verwenden Sie den Befehl awk oben/unten.

5
Archemar

Eher benutzt du 'awk' um "user90" zu filtern:

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
3
saptarshi nag


Mit sed alles in einer Zeichenkette vor einem bestimmten Zeichen löschen (in doppelter Klammer [Specific char] definieren).

echo "randomcollege-nt\user90" | sed 's/.*[\]//'

Bedeutet, dass alle Zeichen (.*[\]) vor einem \ -Zeichen durch Leerzeichen (//) ersetzt werden.

Wenn Sie eine Datei haben und diese ersetzen möchten, verwenden Sie das -i -Flag in sed wie folgt:

sed -i 's/.*[\]//' /path/to/FileName
1
αғsнιη

Die ursprüngliche Frage war sed, aber ich sehe, dass Alternativen hier beliebt sind.

Wenn Sie Bash verwenden, ist die Parametererweiterung bei weitem die einfachste:

Origin='randomcollege-nt\user90'
echo "${Origin#*\\}"

Wenn Sie möglicherweise mehr als einen Backslash erwarten, verdoppeln Sie die Hash-Zeichen:

echo "${Origin##*\\}"

Für weitere Informationen man bash und suchen Sie nach Parameter Expansion.

1
Paddy Landau

Dieser einfache grep Befehl erledigt die Arbeit,

$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$'
user90
1
Avinash Raj

Falls jemand versucht, einen auskommentierten # server_tokens off; automatisch aus nginx zu entfernen, um bei automatischen Entwicklungsoperationen zu helfen:

Sudo sed -ri 's/#\s(server_tokens off;)/\1/' /etc/nginx/nginx.conf.

Getestet und lauffähig für Nginx/1.12.1 unter Ubuntu 16.04 LTS. Verwandte Antwort zum Sperren von NGINX durch Deaktivieren von Servertoken hier .

0
jamescampbell