从unix中的文件中获取一部分行

时间:2014-08-20 05:01:11

标签: shell unix hp-ux

我有一个名为temp.lst的文件,其内容如下:

1,13d0
< /hello/ux/PH/src/DEMO/dir/web/HelloWorld.java
< /hello/ux/PH/src/USOURCES/java/frame/contain/ProcessResult.js
< /hello/ux/PH/src/DEMO/dir/web/Hello.java
< /hello/ux/PH/src/USOURCES/dir/web/World.java
< /hello/ux/PH/src/USOURCES/dir/web/Hey.java

我只需要那些拥有&#34; USOURCES&#34;并丢弃之前的所有内容&#34; USOURCES&#34;。这需要转储到另一个文件中,比如final.lst。

所以,final.lst将是:

USOURCES/java/frame/contain/ProcessResult.js
USOURCES/dir/web/World.java
USOURCES/dir/web/Hey.java

我尝试使用cut命令,但这不是很通用。请帮忙,因为我是unix的新手。

3 个答案:

答案 0 :(得分:1)

sed -n 's@.*/USOURCES@USOURCES@p' temp.lst

-n表示除非最后由p明确告知,否则不要打印。其余的只是从匹配和打印它们的行中删除。

答案 1 :(得分:1)

解决方案

您可以使用grep option -oglob

grep -o 'USOURCES.*' /tmp/so.txt

输出:

USOURCES/java/frame/contain/ProcessResult.js
USOURCES/dir/web/World.java
USOURCES/dir/web/Hey.java

  

-o, - 仅匹配

   Print  only  the  matched  (non-empty) parts of a matching line, 
   with each such part on a separate output line.

答案 2 :(得分:1)

使用awk

awk -F'USOURCES' 'NF>1{print FS $2}' temp.lst > final.lst