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


14

我如何从中得到:

randomcollege-nt\user90

对此:

user90

使用sed


2
有用的提示:如果不确定命令的man the_command_name用途,请键入,然后您将获得有关该命令的有用的说明手册。您也可以访问www.google.com并输入“ command_name教程”,您将找到大量的分步指南。
DBedrenko 2014年

2
有关sed访问的教程,请访问:grymoire.com/Unix/Sed.html
Pandya

Answers:


15

我会用一个简单的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

有趣的事情是我尝试过,但没有任何回报。如果这很重要,我正在使用12.04。仅当我grep -F输入整个字符串时才会显示。
Roboman1723 2014年

@ Roboman1723在12.04上测试,我的第一个命令有效。确保没有在某处定义grep别名。顺便说一句,似乎您正在寻找用sed进行内联替换我已经添加了这样的命令。
西尔万·皮诺

有没有办法使sed命令切出所有“ randomcollege-nt \”,但显示的不仅仅是用户90?示例:randomcollege-nt \ user90 randomcollege-nt \ user91 randomcollege-nt \ user92输出:user90 user91 user92
Roboman1723 2014年

1
@ Roboman1723您应该将原始文件和所需的输出附加到问题中,以便每个愿意帮助您的人都能看到它。
西尔文·皮内

1
@SylvainPineau我认为第一个命令不合适。
阿维纳什·拉吉

20

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

最好的方法是在sed中使用regex提取之后的所有内容\。这是您的操作方式:

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


9

我知道您想使用sed,但我会使用其他方法...

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

1
知道如何使用工具与知道使用哪个工具一样重要。
2014年

5

这是问题吗?

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

如果sting randomcollege-nt不满意,请使用上方/下方的awk命令。


1
当我跑步时我/user90不明白user90
Roboman1723'9

2
不,没关系,我有user90。
saptarshi nag 2014年



1


使用seddelete删除字符串中特定字符之前的所有内容(定义为双括号[Specific char])。

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

手段用空格字符()替换char .*[\]之前的所有()字符\//

如果您有文件并且要替换,请-ised命令中使用use 标志,如下所示:

sed -i 's/.*[\]//' /path/to/FileName

1

最初的问题是sed,但我看到替代品在这里很受欢迎。

如果您使用的是Bash,则参数扩展是最简单的:

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

如果您可能期望不止一个反斜杠,则将井号加倍:

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

有关更多信息,请man bash搜索Parameter Expansion


0

如果有人试图# server_tokens off;自动从nginx中删除注释,以帮助进行自动开发:

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

已在Ubuntu 16.04 LTS上针对nginx / 1.12.1进行测试并工作。通过此处关闭服务器令牌来锁定NGINX的相关答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.