我正在使用grep在文本文件中搜索/Users/
。这是输出:
'dir': u'/Users/dlee/Desktop',
有没有办法在Users/
之后删除这个词?也就是说,要将dlee
作为输出?
答案 0 :(得分:0)
这应该做的工作:
sed -n '\@.*/Users/\([^/]*\)/.*@ s//\1/p' text.file
除非明确打印数据,否则-n
会抑制输出。 \@
符号用/
替换搜索字符(默认@
)。然后搜索模式查找/Users/
后跟一系列非斜线和斜杠,捕获非斜杠(用户名);它也匹配线上的其他所有东西(开头和结尾的.*
)。 s//\1
/ p`命令将匹配的内容(整行)替换为捕获的内容(用户名),并打印信息。
或者,您可以使用反斜杠 - 斜杠序列来匹配数据中的斜杠:
sed -n '/.*\/Users\/\([^/]*\)\/.*/ s//\1/p' text.file
在字符类中的斜杠之前不需要反斜杠,但需要其他反斜杠。如果您不明智地拥有用户名d\lee
并且在字符类中包含反斜杠,则输出中将看不到名称d\lee
。
答案 1 :(得分:0)
潜在地,您也可以使用awk来实现相同的目标。
awk -F"/" '/Users/{print $2}' file
分隔符已设置为/
,它将在包含字符串“Users
”的行上打印第二列。
答案 2 :(得分:0)
使用grep和Perl正则表达式:
$ grep -Po '(?<=/Users/)[^/]*' <<< "'dir': u'/Users/dlee/Desktop',"
dlee
-o
仅返回匹配(?<=/Users/)
是一个“积极的后卫”,即比赛必须先于它,但不包括在内[^/]*
是除正斜杠之外的任意数量的字符