gkm*_*hit 6 grep shell-script text-processing
我有一个文件 abc.txt 的内容是
<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>
Run Code Online (Sandbox Code Playgroud)
我想将所有路径复制到另一个文件中。那就是我希望我的输出文本文件看起来像:
WOFramework/ERExtensions
WOFramework/ERJars
WOFramework/ERPrototypes
WOFramework/JavaEOAccess
WOFramework/JavaEOControl
WOFramework/JavaFoundation
WOFramework/JavaJDBCAdaptor
Run Code Online (Sandbox Code Playgroud)
我假设该文件遵循相同的模式。如果是这种情况,您可以使用如下命令。
grep -o ' path=.*$' file.txt | cut -c8- |rev | cut -c 4- | rev
Run Code Online (Sandbox Code Playgroud)
因此,我使用打开文件cat
,然后仅从中提取字符path=
,然后使用删除不需要的字符cut
,然后使用该rev
技术从末尾删除不需要的字符。
另一种 awk 方法
awk -F'path="' '{print $2}' file.txt |rev | cut -c 4- | rev
Run Code Online (Sandbox Code Playgroud)
我使用path="
作为分隔符并在它之后打印所有信息。而rev
基本上没有与以上相同。
测试
cat file.txt
<classpathentry kind="src" path="Sources"/>
<classpathentry kind="con" path="WOFramework/ERExtensions"/>
<classpathentry kind="con" path="WOFramework/ERJars"/>
<classpathentry kind="con" path="WOFramework/ERPrototypes"/>
<classpathentry kind="con" path="WOFramework/JavaEOAccess"/>
<classpathentry kind="con" path="WOFramework/JavaEOControl"/>
<classpathentry kind="con" path="WOFramework/JavaFoundation"/>
<classpathentry kind="con" path="WOFramework/JavaJDBCAdaptor"/>
Run Code Online (Sandbox Code Playgroud)
运行命令后,
Sources
WOFramework/ERExtensions
WOFramework/ERJars
WOFramework/ERPrototypes
WOFramework/JavaEOAccess
WOFramework/JavaEOControl
WOFramework/JavaFoundation
WOFramework/JavaJDBCAdaptor
Run Code Online (Sandbox Code Playgroud)
Stephane 在评论中提供了更好的方法。
cut -d '"' -f4 file.txt
Run Code Online (Sandbox Code Playgroud)
一个简单的方法awk
:
awk -F\" '/WOF/ {print $4}' abc.txt > outfile
Run Code Online (Sandbox Code Playgroud)
-F\"
将字段分隔符从默认值(空格)更改为引号(用 转义\
)/WOF/
将每个记录(文件的行)的返回结果限制为与模式匹配的结果: WOF
$4
是每个匹配记录的第四个字段,路径。