寻找一个正则表达式,允许我在第二次出现" /"

时间:2017-02-06 06:27:23

标签: regex bash

从具有1到多行的文件开始,如下所示:

0a090s909afd09f     refs/heads/feature/branch-123
0a090s909afd09f     refs/heads/branch-124

我想逐行阅读文件并在第二个" /"之后打印到另一个文件的所有内容:

feature/branch-123
branch-124

5 个答案:

答案 0 :(得分:0)

如果您对awk开放:

awk -F'/' '{$1=$2=""}1' inputfile
  feature branch-123
  branch-124

如果grep可以接受:

grep -oP '/.*?/\K.*' file
feature/branch-123
branch-124

答案 1 :(得分:0)

使用bash参数展开

#!/bin/bash

# Reset IFS and parse line not allowing decoding of any backslash escaped 
# characters, '-r' flag in 'read' takes care of it
while IFS= read -r line
do 
    printf "%s\n" "${line#*/*/}"
done<file

或者在一行中,如

while IFS= read -r line; do echo "${line#*/*/}"; done<file
feature/branch-123
branch-124

答案 2 :(得分:0)

使用GNU sed:

sed -E 's/([^/]*\/){2}//' file

答案 3 :(得分:0)

awk -F'heads\/' '{print $2}' file 

feature/branch-123
branch-124

答案 4 :(得分:0)

使用sed:

sed 's|^[^/]*/[^/]*/||' your_input_file

(注意,我使用|作为分隔符,而不是sed中的普通/,以避免繁琐的转义)

正则表达式应该是微不足道的理解:

^[^/]*/[^/]*/

^              Start of line
 [^/]*         Any number of non-slash character
      /        a slash
       [^/]*   Any number of non-slash character
            /  a slash

上面的字符串被替换为空格,这样就可以了解第二个斜杠之后的内容。