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 > outfileRun Code Online (Sandbox Code Playgroud)
-F\"将字段分隔符从默认值(空格)更改为引号(用 转义\)/WOF/ 将每个记录(文件的行)的返回结果限制为与模式匹配的结果: WOF$4 是每个匹配记录的第四个字段,路径。