我有一个包含
等内容的文件//DCOM/PC/dev/R2.0.0_OZ99163/site-config/profile.cfg
... #2 change 1101417 delete on 2015/06/15 by SMukherj
... #1 change 1099558 branch on 2015/06/08 by BaDas@PC_win_R1.1 (xtext) 'OZ 97960: Startup modifications'
... ... branch from //DCOM/PC/dev/R2.0.0_OZ99163/site-config/profile.cfg#1,#2
步骤:
//
profile.cfg, revision - #2 , name SMukherj
这是我尝试的但是我无法继续下去:
grep -i '\/\/' -A1 test.txt | grep -v '\.\.\. \.\.\.' | awk -F'@' '{print $1}'
答案 0 :(得分:4)
这只使用awk
awk -F '[/ ]' '/^\/\// { file = $NF; getline; print file, $2, $NF; }'
拆分斜杠或空格上的字段。如果该行以//
开头,则将最后一个字段保存为file
;阅读下一行;打印文件,第二个字段(版本号)和最后一个字段(用户名)。
在输入数据的三个副本上,它产生:
profile.cfg #2 SMukherj
profile.cfg #2 SMukherj
profile.cfg #2 SMukherj
答案 1 :(得分:1)
对于类似的内容,使用sed
或awk
会更容易。 JonathanLeffler 向您展示了如何使用awk
执行此操作,以下是使用sed
的类似解决方案:
sed -n '/^\/\// { s:.*/::; N; s/\n.* / /p; }' test.txt
输出:
profile.cfg SMukherj
以上是上述评论版。
parse.sed
/^\/\// { # Run code-block on lines starting with double-slash (//)
s:.*/:: # Remove everything up-to the last slash (/)
N # Add next line to pattern-space
s/\n.* / /p # Substitute everything from the first new-line to
# the last space with a space and print pattern-space
}
像这样运行:
sed -nf parse.sed test.txt