Rob*_*723 15 command-line sed text-processing
我如何从中获得:
randomcollege-nt\user90
Run Code Online (Sandbox Code Playgroud)
对此:
user90
Run Code Online (Sandbox Code Playgroud)
使用sed?
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)
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)
相反,您使用“awk”来过滤“user90”:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
Run Code Online (Sandbox Code Playgroud)
这是问题吗?
$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90
Run Code Online (Sandbox Code Playgroud)
如果 sting randomcollege-nt 不是 contant,请使用上面/下面的 awk 命令。
| 归档时间: |
|
| 查看次数: |
70122 次 |
| 最近记录: |