Ala*_*Ali 21

您正在解析一些文本以从domain\username字符串中提取用户名,很可能来自 Windows。上述大多数答案仅针对您的特定示例字符串。

最好的方法是在 sed 中使用正则表达式来提取\. 以下是您的操作方法:

sed 's|.*\\\(.*\)|\1|'
Run Code Online (Sandbox Code Playgroud)

这将匹配所有 ( .*) 直到反斜杠(这里,我们正在转义它,所以它是\\),然后匹配反斜杠 ( .*)之后的所有内容,但使其成为捕获组(即,将括号括起来,但我们也必须转义他们,所以\(.*\))。现在我们\将字符串中的之后的任何内容作为捕获组,我们通过引用它来打印它\1

您可以将上述sed命令与任何域名一起使用,不一定是randomcollege-nt.

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

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

$ echo "anydomainname\roboman1723" | sed 's|.*\\\(.*\)|\1|'
roboman1723
Run Code Online (Sandbox Code Playgroud)


Syl*_*eau 16

我会用一个简单的grep来寻找user90

$ echo "randomcollege-nt\user90" | grep -o user90
user90
Run Code Online (Sandbox Code Playgroud)

如果 user90 不是常数,则首选此命令:

$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
Run Code Online (Sandbox Code Playgroud)

最后sed用于就地编辑文件:

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

或者匹配所有可能的用户帐户:

$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
Run Code Online (Sandbox Code Playgroud)


ker*_*vin 10

我知道你想使用 sed,但我会使用不同的东西......

echo "randomcollege-nt\user90" | cut -d'\' -f2
Run Code Online (Sandbox Code Playgroud)

  • 了解“如何”使用工具与了解“使用哪种”工具同样重要。 (2认同)

cuo*_*glm 10

另一个sed

$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//'
user90
Run Code Online (Sandbox Code Playgroud)

或 POSIXly:

$ a='randomcollege-nt\user90'
$ printf '%s\n' "${a##*\\}"
user90
Run Code Online (Sandbox Code Playgroud)


sap*_*nag 5

相反,您使用“awk”来过滤“user90”:

echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Run Code Online (Sandbox Code Playgroud)


Arc*_*mar 5

这是问题吗?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
Run Code Online (Sandbox Code Playgroud)

如果 sting randomcollege-nt 不是 contant,请使用上面/下面的 awk 命令。

  • 不,没关系,我得到了 user90。 (2认同)