在特定的单词和/之后出口单词

时间:2016-02-09 00:41:02

标签: sed grep

我正在使用grep在文本文件中搜索/Users/。这是输出:

'dir': u'/Users/dlee/Desktop',

有没有办法在Users/之后删除这个词?也就是说,要将dlee作为输出?

3 个答案:

答案 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/)是一个“积极的后卫”,即比赛必须先于它,但不包括在内
  • [^/]*是除正斜杠之外的任意数量的字符