我如何从中得到:
randomcollege-nt\user90
更改为:
user90
使用sed
?
答案1
您正在解析一些文本以从字符串中提取用户名domain\username
,很可能来自 Windows。上面的大多数答案仅针对您的特定示例字符串。
最好的方法是使用 sed 中的正则表达式来提取 后面的内容\
。操作方法如下:
sed 's|.*\\\(.*\)|\1|'
这将匹配所有内容 ( .*
) 直到反斜杠(这里,我们将其转义,因此是\\
),然后匹配反斜杠后的所有内容 ( .*
),但使其成为捕获组(即用括号括起来,但我们也必须对其进行转义,因此\(.*\)
)。现在我们将\
字符串中 后面的所有内容作为捕获组,我们通过使用 来引用它来打印它\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
答案2
我会用一个简单的方法grep
来寻找user90
:
$ echo "randomcollege-nt\user90" | grep -o user90
user90
如果 user90 不是常数,则最好使用此命令:
$ echo "randomcollege-nt\user90" | grep -oP '(?<=randomcollege-nt\\)\w+'
user90
最后使用sed
它来就地编辑文件:
$ sed -ri 's/randomcollege-nt\\(user[0-9]+)/\1/' my_file
或者匹配所有可能的用户帐户:
$ sed -ri 's/randomcollege-nt\\(\w+)/\1/' my_file
答案3
我知道您想使用 sed,但我会使用一些不同的东西......
echo "randomcollege-nt\user90" | cut -d'\' -f2
答案4
而是使用“awk”来过滤“user90”:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}