使用sed或awk只获取部分文件

时间:2017-02-27 14:47:19

标签: bash awk sed

我有一个文件,其中包含如下文字:

Directory /home/user/ "test_user"
bunch of code
another bunch of code

如何从此文件中仅获取/home/user/部分?

我设法使用awk -F '"' 'NR==1{print $1}' file.txt来删除文件的其余部分,我就像这样输出:

Directory /home/user/

如何更改此命令以仅获取/home/user/部分?我想尽量简单。不幸的是,我无法修改此文件来添加/更改内容。

5 个答案:

答案 0 :(得分:5)

如果您的文件很大,这应该是最快的,明显的

awk '{print $2; exit}' file

它将打印第一行的第二个字段并停止处理文件的其余部分。

答案 1 :(得分:2)

awk应该是:

awk 'NR==1{print $2}' file.txt

将字段分隔符设置为"是错误的,因为它将该行拆分为以下字段:

$1 = 'Directory /home/user/'
$2 = 'test_user'
$3 = '' (empty)

默认记录分隔符[[:space:]]+,分割如下:

$1 = 'Directory'
$2 = '/home/user/'
$3 = '"test_user"'   

答案 2 :(得分:1)

作为替代方案,您可以使用headcut

$ head -n 1 file | cut -d' ' -f2

答案 3 :(得分:0)

不确定为什么使用SELECT p.*, a.path FROM db_products p INNER JOIN db_assets a ON a.guid = p.guid WHERE p.pcId = 1 AND FIND_IN_SET(:locationId, p.locationId) > 0 ORDER BY p.id; 更改分隔符。如果你删除它,那么-F"将为你提供你想要的东西。

$2

当行包含awk 'NR==1{print $2}' file.txt 而不是计算记录时,您还可以使用awk执行print

/home/user

在这种情况下,如果该行被隐藏在文件中,或者如果您有多个实例,则无论在何处都会获得该名称。

答案 4 :(得分:-3)

添加一些grep

grep Directory file.txt|awk '{print $2}'