仅将文件的特定文本复制到另一个文件

仅将文件的特定文本复制到另一个文件

我有一个文件 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"/>

我想将所有路径复制到另一个文件中。也就是说,我希望我的输出文本文件如下所示:

    WOFramework/ERExtensions
    WOFramework/ERJars
    WOFramework/ERPrototypes
    WOFramework/JavaEOAccess
    WOFramework/JavaEOControl
    WOFramework/JavaFoundation
    WOFramework/JavaJDBCAdaptor

答案1

我假设该文件遵循相同的模式。如果是这种情况,您可以使用如下命令。

grep -o ' path=.*$' file.txt | cut -c8- |rev | cut -c 4- | rev

因此,我使用打开文件cat,然后仅从中提取字符path=,然后使用删除不需要的字符cut,然后使用该rev技术从末尾删除不需要的字符。

另一种 awk 方法

awk -F'path="' '{print $2}' file.txt |rev | cut -c 4- | rev

我使用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"/>

运行命令后,

Sources
WOFramework/ERExtensions
WOFramework/ERJars
WOFramework/ERPrototypes
WOFramework/JavaEOAccess
WOFramework/JavaEOControl
WOFramework/JavaFoundation
WOFramework/JavaJDBCAdaptor

Stephane 在评论中提供了更好的方法。

cut -d '"' -f4 file.txt

答案2

一个简单的方法awk

awk -F\" '/WOF/ {print $4}' abc.txt > outfile
  • -F\"将字段分隔符从默认值(空格)更改为引号(用 转义\
  • /WOF/将每条记录(文件行)的返回结果限制为与模式匹配的结果:WOF
  • $4是每个匹配记录的第四个字段,即路径。

答案3

grep 和 cut 的另一种方法:

grep "kind=\"con\"" sample.txt | cut -d \" -f 4 > sample_edited.txt

这将 grep 所有包含路径的行,并通过将's 分隔符kind="con"设置为 来打印路径。cut"

答案4

如果您的版本grep支持 PCRE 风格的环视,则另一种解决方案

grep -oP '(?<=kind="con" path=").+?(?="/>)' abc.txt

相关内容