使用sed删除字符串的第一部分
我如何从中得到:
randomcollege-nt\user90
对此:
user90
用sed
?
我用一个简单的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
您正在解析一些文本以从domain\username
字符串中提取用户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
另一个sed
:
$ echo "randomcollege-nt\user90" | LC_ALL=C sed -e 's/.*\\//' user90
或POSIXly:
$ a='randomcollege-nt\user90' $ printf '%s\n' "${a##*\\}" user90
我知道你想用sed,但我会用不同的东西……
echo "randomcollege-nt\user90" | cut -d'\' -f2
这是个问题吗?
$ echo randomcollege-nt\user90| sed -es,randomcollege-nt\,, user90
如果sting randomcollege-nt不存在,请使用上方/下方的awk命令。
而是使用’awk’来过滤“user90”:
echo "randomcollege-nt\user90" | awk -F\\ {'print $2'}
这个简单的grep命令可以完成这项工作,
$ echo 'randomcollege-nt\user90' | grep -oP '[^\\]*$' user90
用sed
删除特定字符前的字符串中的所有内容(定义为双括号[Specific char])。
echo "randomcollege-nt\user90" | sed 's/.*[\]//'
意味着在具有空格字符( //
)的\
char之前替换所有( .*[\]
)字符
如果你有一个文件,并希望在sed
命令中替换use -i
标志,如下所示:
sed -i 's/.*[\]//' /path/to/FileName
最初的问题要求sed
,但我看到替代品在这里很受欢迎。
如果您使用Bash,参数扩展是最简单的:
ORIGIN='randomcollege-nt\user90' echo "${ORIGIN#*\\}"
如果您可能期望多个反斜杠,请将哈希符号加倍:
echo "${ORIGIN##*\\}"
有关更多信息,请使用man bash
并搜索Parameter Expansion
。
如果有人试图删除注释掉# 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的相关答案。