使用 sed 删除字符串的第一部分

使用 sed 删除字符串的第一部分

我如何从中得到:

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'}

相关内容