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

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)

Ram*_*esh 8

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

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)


jas*_*yan 7

一个简单的方法awk

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